如果 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 语句 ,则此值将为 undefinedsection 9.2.1.

中的规范明确说明了这一点