我正在制作一个简单的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
});
问题在于,当第一层递归完成时,结束代码就被调用了。我需要一种方法,在回调函数内嵌套新承诺和旧承诺。
我希望我的问题足够清楚,我真的不确定如何解释它,异步递归代码的想法让我头疼。