如果 then 处理程序不返回任何内容,则链式 Promise 的解析值是多少

What is the resolution value of a chained Promise if a then handler doesn't return anything?

本文关键字:Promise 多少 程序 处理 then 返回 任何内 如果      更新时间:2023-09-26

如果then处理程序没有return语句,则生成的链式承诺将采用 bluebird 中undefined的值。 但是我在任何地方都看不到承诺/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);
});

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

每个不throw异常的函数调用(在规范术语中具有"正常完成")确实具有这样的返回值。如果函数执行未遇到 return 语句,则此值将undefined 。这在第 9.2.1 节的规范中明确说明。

这是预期的行为,即使您不使用蓝鸟也会发生。如果未使用值显式解析,则该值是未定义的,这在 JS 中很常见。

请参阅此链接到"你不知道JS"一书。它很好地解释了它。