Q.nfcall和Q.fcall有什么区别?

我是node.js的新手 我想了解Q.nfcall。 我有以下的Node.js代码。

function mytest() { console.log('In mytest'); return 'aaa'; } Q.nfcall(mytest) .then( function(value){ console.log(value); }); 

我的预期产出应该是:

 In mytest aaa 

但实际产出是:

 In mytest 

在上面的代码中将Q.nfcall改为Q.fcall之后,输出就成了我的预期:

 In mytest aaa 

为什么? Q.nfcall和Q.fcall有什么区别? 谢谢。

从Q文档:

如果您正在使用使用Node.jscallback模式的函数,其中callback以函数(err,result)的forms出现,Q提供了一些用于在它们之间进行转换的有用实用程序函数。 最直接的可能是Q.nfcall和Q.nfapply

这意味着nfcall()需要调用cb(error, result) Node-style function(cb) cb(error, result) 。 所以当你写:

 Q.nfcall(mytest) .then( function(value){ console.log(value); }); 

Q期望mytest调用通过callback(error, value)Q然后调用你的nextcallbackvalue 。 所以你的代码应该是这样的(这里是Plunkr ):

 function mytest(cb) { console.log('In mytest'); cb(null, 'aaa'); } Q.nfcall(mytest) .then( function(value){ console.log('value', value); }); 

您可以查看nfcall()testing用例,以更深入地了解应该如何使用它。

接受的答案是好的,但要解决这个问题:

  • nfapply期望一系列的参数
  • nfcall期望单独提供的参数

例如:

 Q.nfcall(FS.readFile, "foo.txt", "utf-8"); Q.nfapply(FS.readFile, ["foo.txt", "utf-8"]); 

请参阅https://github.com/kriskowal/q/wiki/API-Reference#qnfapplynodefunc-args