我正在开发一个简单的 Windows 8 应用程序,我需要在其中从网站获取一组数据。我正在使用 WinJS.xhr() 来检索此数据,该数据返回一个 Promise。然后我将一个回调传递给这个 Promise 的 .then() 方法,该方法为我的回调提供异步调用的返回值。.then() 方法返回另一个 Promise,给它我的回调返回的值。这种查询的基本结构如下:
WinJS.xhr({ url: "http://www.example.com/" }).then(
function callback( result_from_xhr )
{
//do stuff
return some_value;
}).then(
function secondcallback( some_value )
{
//do stuff
});
但是,在我的情况下,我可能需要根据第一个查询返回的数据对数据进行额外的查询,并且可能需要根据该数据进行更多查询......等等,递归。
我需要一种方法对此进行编码,以便在所有递归完成之前不执行最终的 .then() ,类似于以下内容:
function recurse() {
return WinJS.xhr({ url: "http://www.example.com/" }).then(
function callback( result_from_xhr )
{
if( result_from_xhr == something )
{
recurse();
}
});
}
recurse().then(
function final()
{
//finishing code
});
问题是,当然,一旦第一级递归完成,就会调用完成代码。我需要一些方法在回调中嵌套新的承诺和旧的承诺。
我希望我的问题足够清楚,我真的不知道如何解释它,坦率地说异步递归代码的想法让我很头疼。