如果当时的处理程序没有返回任何东西,那么链式Promise的分辨率值是多少?

时间:2016-02-03 16:34:19

标签: javascript promise es6-promise

如果then处理程序没有return语句,则生成的链式承诺将采用bluebird中的值undefined。但我无法看到它在Promises / A +或任何地方指定的任何地方?可以依靠这种行为吗?

这是一个测试程序:

var Promise = require('bluebird');

var p = Promise.resolve('test');

p.then(function(s) {
    console.log('s1='+s);
    // no return
}).then(function(s) {
    // bluebird prints "undefined".  is this specified by a standard?
    console.log('s2='+s);
});

2 个答案:

答案 0 :(得分:5)

Promises / A +指定使用回调的返回值来解析承诺。

每个没有throw异常的函数调用(具有“正常完成”,在规范方面)确实具有这样的返回值。如果函数执行没有遇到 return语句,则该值将为undefined。这在section 9.2.1中的规范中明确说明。

答案 1 :(得分:2)

这是预期的行为,即使您不使用 bluebird 也会发生这种情况。如果您没有使用值显式解析,则该值是未定义的,这在JS中是典型的。

请参阅书籍的this链接" You Don't know JS"。它解释得很好。