处理Js承诺拒绝

Sta*_*ley 4 javascript es6-promise

你如何处理承诺之外的错误(例如下面的"新错误")?

function testError() {
    throw new Error("new error") // how to handle this?
    var p123 = new Promise(function(resolve, reject) {
         resolve(123)
    });
    return p123
};

testError().catch(err => {
        return err;  // code doesn't come here
    })
    .then(ok => {
        console.log(ok)
    });
Run Code Online (Sandbox Code Playgroud)

JLR*_*she 6

如果您不确定某个函数是否会同步抛出(或返回一个值),您可以使用它来调用它.then().这将包装它,以便无论如何生成结果都将得到一致的处理:

function testError() {
  throw new Error("new error") // how to handle this?
  var p123 = new Promise(function(resolve, reject) {
    resolve(123)
  });
  return p123
};

Promise.resolve()
  .then(testError)
  .catch(err => {
    console.error(err);
    return err; 
  })
  .then(ok => {
    console.log(ok.message)
  });
Run Code Online (Sandbox Code Playgroud)