Bluebird Promise:是否可以在 new Promise(function (resolve, reject)) 中有多个 reject()?
Bluebird Promise: Is is possible to have multiple reject() in new Promise(function (resolve, reject)?
示例:
function multiRejectExample(){
return new Promise(function (resolve, reject){
if(statement){
console.log('statement 1');
reject(throw new Error('error'));
}
if(statement){
console.log('statement 2');
reject(throw new Error('error'));
}
});
}
我正在使用蓝鸟。以上可以吗?这是不好的做法吗?
另外,如果它在第一个语句中拒绝,为什么 'statement 2' 仍然打印出来?我想 return 如果 'rejected',我该怎么做?
是不是用Promise.try然后抛出错误比较好?帮助!谢谢!
Is is possible to have multiple reject() in new Promise(function
(resolve, reject)?
是的,您可以在多个地方调用 reject()
来获得承诺。这对于 Promises 通常是正确的,而不仅仅是 Bluebird 的特性。
承诺是一种单向状态机。一旦被有理由拒绝,它就不会再改变它的状态。
I'm using bluebird. Is the above okay to do? Is it bad practice?
对同一个承诺多次调用 reject()
不是错误,但只有第一次调用 reject()
会被记录下来,并作为承诺中拒绝的原因.将忽略针对同一承诺对 reject()
的后续调用。
如果你知道你的函数已经完成了它需要做的事情并调用了 reject()
并且没有其他代码需要在该函数中执行,那么只让你的代码的其余部分是不好的做法继续执行。根据该代码的内容,它可能不会造成任何伤害,但最好在完成后 return
。
Also, if it rejects in the first statement, why does 'statement 2'
still print out? I want to return if 'rejected', how to I do this?
调用 reject()
不会停止您的函数的执行。它只是改变了承诺的状态。您的功能仍然继续执行,然后在您的功能完成后,承诺的 .then()
处理程序将被触发。如果在调用 reject()
后不想在函数中执行更多代码,您可以只使用 return
语句。
在您的特定情况下,如果之后没有其他代码需要 运行,那么在您拒绝之后仅 return
可能更有意义,但这不是必需的:
function multiRejectExample(){
return new Promise(function (resolve, reject){
if(statement){
console.log('statement 1');
reject(new Error('error'));
return;
}
if(statement){
console.log('statement 2');
reject(new Error('error'));
return;
}
});
}
示例:
function multiRejectExample(){
return new Promise(function (resolve, reject){
if(statement){
console.log('statement 1');
reject(throw new Error('error'));
}
if(statement){
console.log('statement 2');
reject(throw new Error('error'));
}
});
}
我正在使用蓝鸟。以上可以吗?这是不好的做法吗?
另外,如果它在第一个语句中拒绝,为什么 'statement 2' 仍然打印出来?我想 return 如果 'rejected',我该怎么做?
是不是用Promise.try然后抛出错误比较好?帮助!谢谢!
Is is possible to have multiple reject() in new Promise(function (resolve, reject)?
是的,您可以在多个地方调用 reject()
来获得承诺。这对于 Promises 通常是正确的,而不仅仅是 Bluebird 的特性。
承诺是一种单向状态机。一旦被有理由拒绝,它就不会再改变它的状态。
I'm using bluebird. Is the above okay to do? Is it bad practice?
对同一个承诺多次调用 reject()
不是错误,但只有第一次调用 reject()
会被记录下来,并作为承诺中拒绝的原因.将忽略针对同一承诺对 reject()
的后续调用。
如果你知道你的函数已经完成了它需要做的事情并调用了 reject()
并且没有其他代码需要在该函数中执行,那么只让你的代码的其余部分是不好的做法继续执行。根据该代码的内容,它可能不会造成任何伤害,但最好在完成后 return
。
Also, if it rejects in the first statement, why does 'statement 2' still print out? I want to return if 'rejected', how to I do this?
调用 reject()
不会停止您的函数的执行。它只是改变了承诺的状态。您的功能仍然继续执行,然后在您的功能完成后,承诺的 .then()
处理程序将被触发。如果在调用 reject()
后不想在函数中执行更多代码,您可以只使用 return
语句。
在您的特定情况下,如果之后没有其他代码需要 运行,那么在您拒绝之后仅 return
可能更有意义,但这不是必需的:
function multiRejectExample(){
return new Promise(function (resolve, reject){
if(statement){
console.log('statement 1');
reject(new Error('error'));
return;
}
if(statement){
console.log('statement 2');
reject(new Error('error'));
return;
}
});
}