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
之间的区别,但根据规范,情况显然不是这样。对于这一点,调用方也非常有效地回答了这个问题。