promise

最佳实践

  • 总是在 .then() 里面使用 return 来返回 promise 对象或者同步值
  • 总是在 .then() 里面 throw 同步的 Error 对象
  • 总是使用 .catch() 来捕获错误

常见问题

异步并行

const promises = [1000, 2000, 3000].map(function(timeout) {
  return later(timeout);
});
Promise.all(promises)
  .then(function(data) {
    // data = ['later_1000', 'later_2000', 'later_3000']
  })
  .catch(function(err) {
  });

异步串行

[1000, 2000, 3000]
  .reduce(function(promise, timeout) {
    return promise.then(function() {
      return later(timeout);
    });
  }, Promise.resolve())
  .then(function(data) {
    // data = later_3000
  })
  .catch(function(err) {
  });

promise 对象间的依赖

  Promise.resolve()
  .then(function(dataA) {
    return later(2000);
  })
  .then(function(dataB) {
    // 我们同时需要 dataA 和 dataB
  });

转换写法

Promise.resolve()
  .then(function(dataA) {
    return later(2000).then(function(dataB) {
      return dataA + ':' + dataB;
    });
  })
  .then(function(data) {
    // data = later_1000:later_2000
  });

参考资料

  1. promise比较易懂的讲解: http://kohpoll.github.io/blog/2016/05/02/the-promise-you-may-not-know/
© 404mzk all right reserved,powered by Gitbookhttp://blog.404mzk.com 该文件修订时间: 2017-03-13 13:06:34

results matching ""

    No results matching ""