javascript - 捕获多个 .all() 调用中的错误

标签 javascript promise bluebird

我一直在努力实现一个与我在应用程序中尝试执行的操作相匹配的简单工作示例。

我已经成功了 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/

相关文章:

javascript - 无法取消选中复选框(取消选中复选框时隐藏内容)

javascript - 在 Node.js 中调用一组 http.get 请求完成

javascript - 如何在 typescript 中正确处理promisifyAll?

javascript - promise 履行处理程序未定义

node.js - Bluebird 警告 : a promise was created in a handler but was not returned from it

javascript - Bluebird PromisifyAll 没有任何 Async 后缀,即可以替换原始功能吗?

javascript - 如何将嵌套的 'for' 优化为函数式编程

javascript - 检测 Javascript 对象的变化

javascript - 获取标签文本并将其设置为输入值[为什么输入值只获取空格之前的文本? ]

javascript - Bluebird 中的递归 promise 不返回