Node.js 在Nodejs中,当使用q(promises)模块时,then()返回的值是多少?
我不是在问承诺的实现价值 这里我询问Node.js 在Nodejs中,当使用q(promises)模块时,then()返回的值是多少?,node.js,promise,q,Node.js,Promise,Q,我不是在问承诺的实现价值 这里我询问then()函数的返回值。我关心的具体问题是根据条件建立承诺列表,例如: function operationThatReturnsPromise() { var p = q.resolve({ prop1 : value1 }) .then(function(ctx) {.... return ctx;}); if (condition1) { // which usage is required or preferre
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;
}
它们相等吗?
美国
返回一个新的承诺,其状态取决于该承诺和提供的回调函数
这似乎表明前者(选项1)是首选方案。有什么指导吗 您应该始终使用选项1 承诺是不变的
.then()
返回一个带有回调(最终)结果的新承诺
如果忽略其返回值,您将永远不会等待操作完成,更糟糕的是,任何失败都将被默默地吞噬。只需执行测试,选项2将不起作用。如果希望使用
ctx
解析承诺,则必须返回的返回值,然后(函数(ctx){…return ctx;})
。使用选项2,此返回值将永远丢失
顺便说一句,请大家检查一下Q的基准测试,并意识到您可能应该使用bluebird,这是我所知道的唯一一个性能非常好的promise库。值得一提的是,像bluebird或firefox中的native promises这样的promise库不会默默地吞下异常。我看到您的背景是.NET,将
。然后
视为任务的。继续
,最终返回任务。许多promise库开发人员关心性能。佩特卡只是比其他大多数人更了解它。是的。也许这有点夸张了。