执行promise循环并捕获错误

时间:2016-10-01 17:52:37

标签: javascript exception promise ecmascript-6 bluebird

所以这是来自@ Roamer-1888的真正美女:

from Crypto.PublicKey import RSA 

new_key = RSA.generate(2048, e=65537) 
public_key = new_key.publickey().exportKey("PEM") 
private_key = new_key.exportKey("PEM") 


fileWrite(fileName, data):
    fd = open(fileName, 'wb')
    fd.write(data)
    fd.close()

fileWrite('privkey.der', private_key)
fileWrite('pubkey.der', public_key)

它是一个连续执行的promise循环。我有两个问题:

  1. 如果循环中的promise失败,它会退出循环会发生什么?
  2. 我应该在循环中实现catch,还是会失败传播回调用函数?
  3. 我应该在循环中插入一个catch吗?

    executePromiseLoop(myArray).catch(logError).then(() => console.log('yay!'));
    
    function executePromiseLoop(arr) {
        return arr.reduce(function(promise, email) {
            return promise.then(function() {
                return myCustomPromise(email);
            });
        }, Promise.resolve());
    }
    

1 个答案:

答案 0 :(得分:3)

  

如果循环中的promise失败,它会退出循环会发生什么?

是。如果拒绝单个承诺,则不会执行所有下一个承诺。例如,请参阅此代码:



Promise.resolve()
  .then(Promise.reject)
  .then(() => console.log('this will not be executed'))
  .catch(() => console.log('error'))




第三行中的承诺不会被执行,因为之前的承诺被拒绝了。

  

我应该在循环中实现catch,还是会失败传播回调用函数?

拒绝消息将传播,因此您不需要在循环内使用catch。例如,请参阅此代码:



Promise.resolve()
  .then(() => Promise.resolve())
  .then(() => Promise.reject('something went wrong'))
  .then(() => Promise.resolve())
  .then(() => Promise.resolve())
  .catch(error => console.log(error))