如何拒绝我没有创建的承诺?
How to reject a promise i did not create?
这里的承诺还很陌生,我想知道..
查看 bluebird
处理承诺的包后:
- 创建解析器
- 成功解决/失败拒绝
- 返回创建的解析器
promise
属性
我一直想知道如何使用已经创建承诺的包来实现拒绝提出 catch
承诺的相同效果,而我只是使用他们的 .then
链?
我的意思是,在我的创建解析器上使用 reject
最终会向此函数的用户提出 catch
。
如果我没有解析器,我怎么能提出 catch
。如下链接承诺:
function doSomthing(): Promise<someValue>
return somePackage.someMethodWithPromise().then((result)=> {
return someValueToTheNextThen;
})
}
我看到一些包实现它的唯一方法是返回一个 { errors, result }
对象,以便下一个 then
可以检查是否有任何错误并对其做出反应,但我想要提出一个 catch
而不是检查我拥有的每个 then
中的错误..
希望我说清楚了,如果有任何遗漏,请告诉我。
在此先感谢您的帮助!
.then
return 也是一个 Promise。如果您确定存在错误,您可以简单地创建一个被拒绝的承诺并 return 从那里创建它。
return somePackage.someMethodWithPromise().then(result => {
if (result.erroneous()) return Promise.reject('erroneous data');
return someValueToTheNextThen;
})
您也可以简单地从 then
中选择 throw anError;
,这也会被捕获在 catch
块中。
就像在同步代码中一样,您可以通过抛出错误来实现。当您使用承诺并且已经在 then
链中时,这是惯用的做法:
function doSomething(): Promise<someValue>
return somePackage.someMethodWithPromise().then((result)=> {
if (badResult(result)) {
throw new Error('Bad result!');
}
return someValueToTheNextThen;
})
}
doSomething()
.then(result => {
// this will get skipped if an error was thrown
})
.catch(error => {
// error will be caught here if one was thrown
console.error(error);
});
这里的承诺还很陌生,我想知道..
查看 bluebird
处理承诺的包后:
- 创建解析器
- 成功解决/失败拒绝
- 返回创建的解析器
promise
属性
我一直想知道如何使用已经创建承诺的包来实现拒绝提出 catch
承诺的相同效果,而我只是使用他们的 .then
链?
我的意思是,在我的创建解析器上使用 reject
最终会向此函数的用户提出 catch
。
如果我没有解析器,我怎么能提出 catch
。如下链接承诺:
function doSomthing(): Promise<someValue>
return somePackage.someMethodWithPromise().then((result)=> {
return someValueToTheNextThen;
})
}
我看到一些包实现它的唯一方法是返回一个 { errors, result }
对象,以便下一个 then
可以检查是否有任何错误并对其做出反应,但我想要提出一个 catch
而不是检查我拥有的每个 then
中的错误..
希望我说清楚了,如果有任何遗漏,请告诉我。
在此先感谢您的帮助!
.then
return 也是一个 Promise。如果您确定存在错误,您可以简单地创建一个被拒绝的承诺并 return 从那里创建它。
return somePackage.someMethodWithPromise().then(result => {
if (result.erroneous()) return Promise.reject('erroneous data');
return someValueToTheNextThen;
})
您也可以简单地从 then
中选择 throw anError;
,这也会被捕获在 catch
块中。
就像在同步代码中一样,您可以通过抛出错误来实现。当您使用承诺并且已经在 then
链中时,这是惯用的做法:
function doSomething(): Promise<someValue>
return somePackage.someMethodWithPromise().then((result)=> {
if (badResult(result)) {
throw new Error('Bad result!');
}
return someValueToTheNextThen;
})
}
doSomething()
.then(result => {
// this will get skipped if an error was thrown
})
.catch(error => {
// error will be caught here if one was thrown
console.error(error);
});