我的错误回调失败了Q Promises

时间:2014-04-25 10:33:11

标签: node.js promise q

第一次尝试使用Q promises库时,我无法使用我的错误回调:

   var fs = require('fs');
   var Q = require('q');

   var prom =  Q.nfcall(fs.writeFile('daa/write.txt', 'your mom', 'utf-8'));
   prom.then(function(err){
     console.log("error on writing file: ", err);
   });

我故意给写入函数提供错误的目标以触发错误。但是在命令行上我收到了这个错误:

fs: missing callback Error: ENOENT, open 'daa/write.txt'"

为什么我的错误回调没有被调用?为什么我的错误回调丢失了?

2 个答案:

答案 0 :(得分:1)

原来我需要传递函数而不是调用它。这两个回调都按预期使用此代码:

var fs = require('fs');
var Q = require('q');

var prom =  Q.nfcall(fs.writeFile, 'data/write.txt', 'your mom', 'utf-8');
prom.then(function(){
  console.log('file written');
},function(err){
  console.log("error on writing file: ", err);
});

答案 1 :(得分:1)

.nfcall接受函数引用,而不是函数调用的结果。

var prom =  Q.nfcall(fs.writeFile, 'daa/write.txt', 'your mom', 'utf-8');

如果您打算多次调用fs,则应考虑使用Q.denodify。像Bluebird这样的其他库提供了一个更强大的promisifyAll函数,可以将API转换为promises。