我一直围绕着承诺试图实现一个简单的工作示例,该示例与我在我的应用程序中尝试的内容相匹配。
我已经把它降低了85%,我只是不确定如果在后续的.all()
调用中发生错误,这是否真的会发现错误。我考虑使用.catch()
来抓取错误,但是各种示例似乎都使用了.done()
。
我是否捕获了此示例中可能发生的所有错误?
var Promise = require('bluebird');
var UUID = require('node-uuid');
var fs = Promise.promisifyAll(require('fs'));
var innerArray = function() {
return [
{ type: "thing", id: UUID.v4() },
{ type: "thang", id: UUID.v4() },
{ type: "thing", id: UUID.v4() },
{ type: "thang", id: UUID.v4() }
];
};
var outerArray = [
innerArray(),
innerArray(),
innerArray(),
innerArray()
];
fs.readdirAsync('dump')
.then(function(files) {
return files.map(function(file) {
return fs.unlinkAsync('dump/' + file);
});
})
.then(function(stuff) {
return Promise.all(outerArray.map(function(inArr) {
return Promise.all(inArr.map(function(item, itemIndex) {
return fs.writeFileAsync( 'dump/' + item.id, JSON.stringify(item));
}));
}));
}).done(function(donezo) {
console.log('Done!');
}, function(e) {
throw e;
});
很抱歉发布代码转储并询问“这有用吗?”代码有效,我只是不确定它是否会在流程中的某个时刻发生错误。
答案 0 :(得分:1)
是的,任何地方的任何错误都会传播到完成错误处理程序,但如果您只是抛出错误,那么错误处理是不必要的。有错误处理程序的唯一原因是UI消息或非常自定义的日志(如果编写从stderr重定向到文件的堆栈跟踪是不够的)
除此之外,我实际上将它写成:
fs.readdirAsync('dump').map(function(file) {
return fs.unlinkAsync('dump/' + file);
}).then(function() {
return Promise.map(outerArray, function(inArr) {
return Promise.map(inArr, function(item, itemIndex) {
return fs.writeFileAsync( 'dump/' + item.id, JSON.stringify(item));
});
});
}).then(function() {
console.log('Done!');
});