在javascript中导出默认值

在javascript中导出默认值

问题描述:

我正在通过教程介绍如何使用express和mongoose创建一个restful api。在javascript中导出默认值

我理解一切,除了此位就在这里

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)部分。

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

+2

'callback'是被导出的匿名函数的第一个也是唯一的参数的名称。该参数预计是一个函数,它在'callback(db)'处被调用;' – 4castle

+0

Ooooh,好的!这样做更有意义。谢谢! –

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. 
}); 

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

这是一个单箭头PARAM功能,在MDN

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

MDN source

该代码使用箭头函数。因此,它是与此相同:

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)

希望它更清晰现在一个参数叫回来。

callback被假定为函数定义。正如你在你的例子中,它是以db作为它的参数被调用的。

回调主要用于异步操作,即使db尚未准备好,程序仍会继续执行。这被称为“non-blocking”执行。这样,当db数据可用时,它将传递到callback并执行。

希望这会有所帮助!