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
然后调用你的next
callbackvalue
。 所以你的代码应该是这样的(这里是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