2016-07-19 16 views
0

これは私の謎です。 、forループに値が渡されていません

1)

var revisionNumber; 
var $list = $('<ul>'); 

TFS_Wit_WebApi.getClient().getWorkItem(284) 
    .then(function(query) { 
     revisionNumber = query.rev; 
    }); 

2)

for (i = 0; i < revisionNumber; i++) { 
    TFS_Wit_WebApi.getClient().getRevision(284, 6) 
     .then(function(query) { 
      $list.append($('<li>').text("story board" + revisionNumber)); 
     }); 
} 

reivisonNumber値はループの中で、私は代わりに変数の数15を入れた場合15であることが想定される:私は2つの機能を有しています2番目の関数はループと同様にうまく機能し、実際にはこの数値を表示します。

forループを削除すると、関数fからのrevisionNumber変数の値も表示されます最初の関数。

しかし、forループにrevisionNumberを置くと、2番目の関数はまったく機能しません。

上記のforループで2番目の関数の中にないのはなぜですか?

+4

それはあなたが同様に求めているものは不明です。しかし、あなたの 'for'ループがコードの直後にある場合は(http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) 1)上記のループが始まると 'revisionNumber'が' undefined'以外の値を持つことを期待しています。 –

+0

不正なループ+非同期リターン。ジャックポット! –

+0

@ T.J.Crowderだから、forループは(1)のコードに従います。私はforループを削除してその値をチェックし、その値は2番目の関数で定義されていませんでした。 – Student

答えて

0

getWorkItem().then()コールバックが実行される前に、forループが実行されている可能性があります。 forループをコールバック関数に移動するか、独自の関数に入れてコールバックでその関数を呼び出すことによって、forループを実行する前にそのコールバックが実行されるまで待つ必要があります。例えば

var revisionNumber; 
var $list = $('<ul>'); 

TFS_Wit_WebApi.getClient().getWorkItem(284).then(function (query) { 
    revisionNumber = query.rev; 
    for (i = 0; i < revisionNumber; i++) { 
     TFS_Wit_WebApi.getClient().getRevision(284, 6).then(function (query) { 
      $list.append($('<li>').text("story board" + revisionNumber)); 
     }); 
    } 
}); 
+0

ありがとう!それはうまくいった。私はそれについて知らなかった:) – Student

関連する問題