Javascript 如果then处理程序不';我什么也不退吗?

Javascript 如果then处理程序不';我什么也不退吗?,javascript,promise,es6-promise,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(

如果
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);
});

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


请参阅本书的链接“”。它很好地解释了这一点。

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


每一个没有抛出异常的函数调用(用规范术语来说是“正常完成”)都有这样一个返回值。如果函数执行未遇到
return
语句,则此值将
未定义
。这在中的规范中是明确的。

如果任何函数不返回任何内容,或者根本不显式返回,则返回的值是
未定义的
。这是正常的Javascript行为,与承诺无关。感谢链接。出于某种原因,我认为调用方可以在javascript中区分void返回和显式
返回undefined
之间的区别,但根据规范,情况显然不是这样。对于这一点,调用方也非常有效地回答了这个问题。