2016-07-29 4 views
-1

コールバックと約束を組み合わせて試してみることにしました。私の文脈では、私は実際の約束を使用するのではなく、「当時」の約束の表記を使用しています。私は、オブジェクトを返すコールバックを持つ関数を呼び出そうとしています。そのオブジェクトは、最初の呼び出しに関連付けられたthen()メソッド内の関数を呼び出す関数を持つオブジェクトを返します。オブジェクトのオブジェクトとプロパティを返すコールバックが期待通りに呼び出されない

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

 
function step2(obj) { 
 
\t //do something to obj 
 
    obj.key2 = "hey"; 
 
    return { 
 
    \t andthen: function(callback) { 
 
    \t callback(obj); 
 
    } 
 
\t }; 
 
} 
 

 
function step3(obj) { 
 
    //modify obj more 
 
    console.log(obj); 
 
} 
 

 
step1('arg1',step2).andthen(function(obj) { step3(obj); });

キャッチされない例外TypeErrorこのコードの結果は:未定義のプロパティを読んで 'andthen' することはできません以下は、私のコードです。 Since step1('arg1',step2)はオブジェクトを返していますが、なぜjavascriptがオブジェクトの "andthen"プロパティを呼び出せないのですか?私はJavaScriptが非同期であることを理解しますが、.andthen(function(obj) { step3(obj); })step1が完了するまで待つことになります。

+0

'step1'は何も返さない*(' undefined'を除いて)*なので、あなたはその部分で間違っていて、連鎖することはできません。 – adeneo

+0

また、おそらくこれは人為的な例ですが、このコードは非同期的な処理を行わないので、何がポイントですか? 3つのメソッドを順番に呼び出します。 – bhamlin

+1

実際に 'step1( 'arg1'、function(o){step2(o)andand(step3)});' – adeneo

答えて

2

あなたはcallback(obj)文の前step1機能でreturn文を忘れてしまった:一般的な発言として

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

を、JavaScriptで、関数の最後の文が自動的にそれの戻り値ではありません、returnキーワードがなければなりません明示的に述べている。

関連する問題