javascript

时间:2017-03-16 22:42:39

标签: javascript node.js express mongoose

我正在编写一个关于如何使用express和mongoose创建restful api的教程。

我正在理解除了这一点之外的一切



import mongoose from 'mongoose';
import config from './config';

export default callback => {
    // connect to the database
    let db = mongoose.connect(config.mongoUrl);

    // callback db
    callback(db);
}




我明白它的目的是什么以及如何称呼它。 令我困惑的是回调(db)部分。

这是内置函数还是以某种方式调用自身?

4 个答案:

答案 0 :(得分:2)

这是一个单一的参数箭头函数,请查看其对mdn的描述

// Parentheses are optional when there's only one parameter:
(singleParam) => { statements }
singleParam => { statements }

MDN source

答案 1 :(得分:2)

该代码使用箭头功能。所以它与此相同:

import mongoose from 'mongoose';
import config from './config';

export default function(callback) {
    // connect to the database
    let db = mongoose.connect(config.mongoUrl);

    // callback db
    callback(db);
}

所以这个函数被一些其他模块使用回调函数作为参数回调,该参数是用callback(db)运行的

希望现在更清楚了。

答案 2 :(得分:1)

在这种情况下,

callback不是函数的名称。 export default正在导出一个匿名箭头函数,该函数将callback作为参数。因为它只有一个参数,所以它们不需要包含在parens中,因为它是有效的JavaScript。传入函数时,它将异步调用它,返回传递给回调函数的数据。为了说明,请考虑以下示例。

import mongoose from 'mongoose';
import config from './config';

export default callback => {
    // connect to the database
    setTimeout( function () {
        let db = mongoose.connect(config.mongoUrl);

        callback(db);
    }, 1000); // simulate latency

}

然后,当您将文件导入其他地方时:

import db from './db';

db( database => {
    // One second later, this function would be called. 
    // Do something with the database here.
});

希望这个例子清楚地说明了这个概念。

答案 3 :(得分:1)

callback被假定为函数定义。正如您在示例中所述,它以db为参数调用。

回调主要用于异步操作,即使db尚未就绪,程序仍继续执行。这被称为" non-blocking"执行。这样,当db数据可用时,它会传递给callback并执行。

希望这有帮助!