我不是在问这个承诺的履行价值。
这里我要问的是then()
函数的返回值。我关注的具体事情是根据条件构建承诺列表,例如:
function operationThatReturnsPromise() {
var p = q.resolve({ prop1 : value1 })
.then(function(ctx) {.... return ctx;});
if (condition1) {
// which usage is required or preferred?
// 1. p = p.then() ?
p = p.then(function(ctx) { ..... return ctx; } );
// 2. p.then() ?
p.then(function(ctx) {... return ctx; });
}
return p;
}
他们是等同的吗? doc at Mozilla州
返回一个新的promise,其状态根据此promise和提供的回调函数而发展。
这似乎表明前者(选项1)是首选。任何指导?
答案 0 :(得分:1)
您应始终使用选项1。
承诺是不可改变的; .then()
返回带有回调(最终)结果的新承诺。
如果忽略其返回值,您将永远不会等待操作完成,更糟糕的是,任何失败都会被默默地吞没。
答案 1 :(得分:0)
只是做测试,选项2不起作用。如果您想要使用ctx
解析的承诺,则必须返回then(function(ctx) {... return ctx; })
的返回值。使用选项2,此返回值将永远丢失。
顺便说一下,请大家检查Q的基准,并意识到你应该使用bluebird,这是我知道的唯一一款性能非常好的诺言库。