第一次尝试使用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'"
为什么我的错误回调没有被调用?为什么我的错误回调丢失了?
答案 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。