不按预期调用对象的回调返回对象和属性

时间:2016-07-29 18:58:59

标签: javascript callback

我决定尝试各种回调和承诺。在我的背景下,我没有使用实际的承诺,而是使用"然后"的承诺符号。我试图调用一个函数,它有一个返回一个对象的回调。该对象返回一个带有函数的对象,该函数调用附加到第一个调用的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完成。

1 个答案:

答案 0 :(得分:2)

您在return声明之前忘记了step1函数中的callback(obj)语句:

function step1(arg,callback) {
    //do stuff
  var obj = {key:"value"};
  return callback(obj);
}

作为一般评论,在JavaScript中,函数的最后一个语句不是自动的返回值,return关键字必须明确说明。