如果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);
});
答案 0 :(得分:5)
Promises / A +指定使用回调的返回值来解析承诺。
每个没有throw
异常的函数调用(具有“正常完成”,在规范方面)确实具有这样的返回值。如果函数执行没有遇到 return
语句,则该值将为undefined
。这在section 9.2.1中的规范中明确说明。
答案 1 :(得分:2)
这是预期的行为,即使您不使用 bluebird 也会发生这种情况。如果您没有使用值显式解析,则该值是未定义的,这在JS中是典型的。
请参阅书籍的this链接" You Don't know JS"。它解释得很好。