我决定尝试各种回调和承诺。在我的背景下,我没有使用实际的承诺,而是使用"然后"的承诺符号。我试图调用一个函数,它有一个返回一个对象的回调。该对象返回一个带有函数的对象,该函数调用附加到第一个调用的then()方法内的函数。以下是我的代码:
function step1(arg,callback) {
//do stuff
var obj = {key:"value"};
callback(obj);
}
function step2(obj) {
//do something to obj
obj.key2 = "hey";
return {
andthen: function(callback) {
callback(obj);
}
};
}
function step3(obj) {
//modify obj more
console.log(obj);
}
step1('arg1',step2).andthen(function(obj) { step3(obj); });

此代码导致未捕获的TypeError:无法读取属性'然后'未定义的。 Since step1('arg1',step2)
正在返回一个对象,为什么javascript无法调用"然后"对象的属性?我意识到Javascript是异步的,但我的理解是.andthen(function(obj) { step3(obj); })
会等到step1
完成。
答案 0 :(得分:2)
您在return
声明之前忘记了step1
函数中的callback(obj)
语句:
function step1(arg,callback) {
//do stuff
var obj = {key:"value"};
return callback(obj);
}
作为一般评论,在JavaScript中,函数的最后一个语句不是自动的返回值,return
关键字必须明确说明。