如果 then 处理程序没有 return 任何东西,链式 Promise 的解析值是多少?
What is the resolution value of a chained Promise if a then handler doesn't return anything?
如果 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);
});
这是预期的行为,即使您不使用 bluebird 也会发生。如果您没有显式解析值,则该值是未定义的,这在 JS 中很典型。
参考 this link to the book "You Don't know JS”。解释得很好。
Promises/A+ 指定使用回调的 return 值 来解析承诺。
每个没有 throw
异常的函数调用(在规范中有 "normal completion")确实有这样的 return 值。如果函数执行没有遇到 return
语句 ,则此值将为 undefined
。 section 9.2.1.
中的规范明确说明了这一点
如果 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);
});
这是预期的行为,即使您不使用 bluebird 也会发生。如果您没有显式解析值,则该值是未定义的,这在 JS 中很典型。
参考 this link to the book "You Don't know JS”。解释得很好。
Promises/A+ 指定使用回调的 return 值 来解析承诺。
每个没有 throw
异常的函数调用(在规范中有 "normal completion")确实有这样的 return 值。如果函数执行没有遇到 return
语句 ,则此值将为 undefined
。 section 9.2.1.