我一直在努力实现一个与我在应用程序中尝试执行的操作相匹配的简单工作示例。
我已经成功了 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;
});
很抱歉发布代码转储并询问“这有效吗?”该代码有效,我只是不确定如果在流程中的某个时刻发生错误,它是否会捕获错误。
最佳答案
是的,来自任何地方的任何错误都会传播到完成的错误处理程序,但如果您只是抛出错误,则该错误处理程序是不必要的。使用错误处理程序的唯一原因是 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!');
});
关于javascript - 捕获多个 .all() 调用中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25265771/