2016-07-19 76 views
0

这是一个有点对我来说是一个谜。我有两个功能:价值没有被传递给循环

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。当在for循环我把代替可变的数15,第二功能工作得很好,以及用于循环,它实际上显示该号码15.

如果删除for循环中,它也可以与来自F显示revisionNumber变量的值第一个功能。

然而,当我把revisionNumber在我的for循环,第二个功能无法在所有工作。

为什么没有第二个函数内部与上述去为循环?

+4

目前还不清楚你问什么为好。这可能是http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call,不过,如果你的'for'循环紧跟在代码( 1),并且你期望'revisionNumber'在循环开始时有一个非undefined的值。 –

+0

臭名昭着的循环+异步返回。大奖! –

+0

@ T.J.Crowder所以是的,for循环遵循(1)中的代码。我通过删除for循环来检查该值,并且该值在第二个函数中未定义。 – Student

回答

0

for循环正在执行getWorkItem().then()回调之前可能正在执行。在运行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