Kua*_*uan 5 javascript promise
所有:
我是Promise的新手,这是一个例子:
var someAsyncThing = function() {
return new Promise(function(resolve, reject) {
// this will throw, x does not exist
resolve(x + 2);
});
};
var someOtherAsyncThing = function() {
return new Promise(function(resolve, reject) {
reject('something went wrong');
});
};
someAsyncThing().then(function() {
return someOtherAsyncThing();
}).catch(function(error) {
console.log('oh no', error);
});
Run Code Online (Sandbox Code Playgroud)
我不太了解.then()是如何与Promise一起工作的,现在我可以理解someAsyncThing()返回一个Promise,它将产生一个异常,从而转向.catch()部分.如果我们换resolve(x+2)到resolve(4),那么它会去运行someOtherAsyncThing();和返回另一个承诺,
第一个问题是.then()的返回是否是Promise?
而第二个问题,如果在someOtherAsyncThing()的承诺,我使用resolve(x+2)造成了异常,那么它也去同.catch()一部分,那么我怎么能作出这样的.catch()只捕获异常引起的someAsyncThing()"为链接的承诺(和同样的问题.then(),如果有任何)?
谢谢
第一个问题是 .then() 的返回是否是那个 Promise?
p.then()返回一个承诺 - 永远。如果传递给.then()处理程序的回调返回一个值,则新返回的 Promise 将与父 Promise 同时解析,但将使用处理程序返回的值进行解析。
如果.then()处理程序返回一个承诺,则在处理程序返回的承诺.then()被履行/拒绝之前,返回的承诺不会履行/拒绝。他们被拴在一起。
如果.then()处理程序抛出异常,则返回的 Promise.then()将被拒绝,并将异常作为值。抛出与返回被拒绝的承诺相同。
如果在
someOtherAsyncThing()的 Promise 中,我用来resolve(x+2)引发异常,那么它也会转到相同的.catch()部分,那么我怎样才能使其.catch()仅捕获由someAsyncThing()的 Promise 引起的异常(以及链式的相同问题,.then()如果有的话)?
Promise 的美妙之处在于,错误会沿着链向上传播,直到得到处理。在任何级别停止错误传播的方法是处理那里的错误。
如果你想分离.catch()机会,那么你就必须抓住较低的水平。例如:
someAsyncThing().then(function() {
return someOtherAsyncThing().catch(function(err) {
// someOtherAsyncThing rejected here
// you can handle that rejection here and decide how you want to proceed
// for example, suppose you just want to handle the rejection, log it
// and then continue on as if there was no problem, you can just return
// a value here
return 0;
});
}).catch(function(error) {
console.log('oh no', error);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |