如果您想将这些函数与Promise链接在一起,则它们必须 返回Promise 。
如果要将它们与
async模块链接,则它们必须 将回调 作为参数。
现在, 他们既不返回诺言 (或其他任何东西), 也不以回调
(或其他任何东西)为参数。如果该函数不执行回调并且不返回任何内容,则您只能调用它而已。您将不会收到任何结果的通知。
例
回呼
如果您有3个采用回调的函数:
function fun1(cb) { setTimeout(() => { cb(null, "fun1"); }, 1000);}function fun2(cb) { setTimeout(() => { cb(null, "fun2"); }, 3000);}function fun3(cb) { setTimeout(() => { cb(null, "fun3"); }, 100);}然后,您可以知道何时完成:
fun3((err, value) => { console.log('fun3 finished:', value);});您可以轻松地等待一个,然后再开始另一个:
fun1((err1, val1) => { fun2((err2, val2) => { console.log("fun1 + fun2:", val1, val2); });});承诺
如果函数返回promise:
function fun1() { return new Promise((res, rej) => { setTimeout(() => { res("fun1"); }, 1000); });}function fun2() { return new Promise((res, rej) => { setTimeout(() => { res("fun2"); }, 3000); });}function fun3() { return new Promise((res, rej) => { setTimeout(() => { res("fun3"); }, 100); });}然后,您还可以知道它们何时完成:
fun3().then(value => { console.log('fun3 finished:', value);});您还可以轻松地嵌套调用:
fun1().then(val1 => { fun2().then(val2 => { console.log("fun1 + fun2:", val1, val2); });});要么:
fun1().then(val1 => fun2()).then(val2 => fun3()).then(val3 => console.log('All 3 finished in series'));等等
为了能够同时使用这两种样式,请参见以下文档:
- http://caolan.github.io/async/
- http://bluebirdjs.com/docs/getting-started.html
- https://developer.mozilla.org/en/docs/Web/Javascript/Reference/Global_Objects/Promise



