如何链接 javascript 承诺和错误
how to chain javascript promises and errors
假设:
function f() {
return p1()
.then(function(p1res) {
console.log('p1 ok');
return Promise.resolve(p1res);
}, function(err) {
console.log('p1 err '+err);
return Promise.reject(err);
}).then( ... proceed
是语句
return Promise.resolve(p1res);
和
return Promise.reject(err);
需要吗?
Are the statements return Promise.resolve(p1res);
and return Promise.reject(err);
needed?
是的,需要这个或类似的东西如果您计划从这些处理程序中链接额外的 then
处理程序,因此需要保留 ("pass through")承诺的价值和地位。但是,即使你打算这样做:
而不是 return Promise.resolve(p1res);
它会更简单,相当于只说 return p1res;
.
而不是 return Promise.reject(err);
会更简单,相当于只说 throw err;
,用 "reason" [=18 继续错误路径上的承诺=].
但是,如果您的目标只是让一个处理程序记录状态,则您不需要,也可能不想,从那里链接后续处理程序,因为这会增加您的麻烦确保状态报告处理程序 return 值或为了下游处理程序的利益重新抛出错误。相反,您可以将状态报告处理程序放在单独的 "branch" 上,而不用担心它们 return 或通过什么:
function f() {
let result = p1();
result . then(
function(p1res) { console.log('p1 ok'); },
function(err) { console.log('p1 err ', err); });
result . then(
...proceed
假设:
function f() {
return p1()
.then(function(p1res) {
console.log('p1 ok');
return Promise.resolve(p1res);
}, function(err) {
console.log('p1 err '+err);
return Promise.reject(err);
}).then( ... proceed
是语句
return Promise.resolve(p1res);
和
return Promise.reject(err);
需要吗?
Are the statements
return Promise.resolve(p1res);
andreturn Promise.reject(err);
needed?
是的,需要这个或类似的东西如果您计划从这些处理程序中链接额外的 then
处理程序,因此需要保留 ("pass through")承诺的价值和地位。但是,即使你打算这样做:
而不是
return Promise.resolve(p1res);
它会更简单,相当于只说return p1res;
.而不是
return Promise.reject(err);
会更简单,相当于只说throw err;
,用 "reason" [=18 继续错误路径上的承诺=].
但是,如果您的目标只是让一个处理程序记录状态,则您不需要,也可能不想,从那里链接后续处理程序,因为这会增加您的麻烦确保状态报告处理程序 return 值或为了下游处理程序的利益重新抛出错误。相反,您可以将状态报告处理程序放在单独的 "branch" 上,而不用担心它们 return 或通过什么:
function f() {
let result = p1();
result . then(
function(p1res) { console.log('p1 ok'); },
function(err) { console.log('p1 err ', err); });
result . then(
...proceed