我正在开发一个简单的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
});
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,我可能需要根据第一个查询返回的数据进行额外的数据查询,并且可能还需要更多查询,具体取决于THAT数据......等等,递归查询.
我需要一种方法对其进行编码,以便在所有递归完成之前不执行最终的.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
});
Run Code Online (Sandbox Code Playgroud)
问题是,当然,只要第一级递归完成,就会调用整理代码.我需要一些方法来在回调中嵌套新的promise和旧的promise.
我希望我的问题很清楚,我真的不确定如何解释它,坦率地说,异步递归代码的想法让我头疼.
长话短说,我正在做一个平台游戏.我还不够大,已经拿走了微积分,所以我不知道衍生物或积分,但我知道它们.期望的行为是让我的角色在他身边的一个阻挡位于他所站立的位置之上时自动跳跃; 例如,楼梯.通过这种方式,玩家可以向左/向右爬楼梯,而不必向跳跃键发送垃圾邮件.
问题在于我实施跳跃的方式; 我决定采用马里奥风格,让玩家更长时间地"跳跃"跳得更高.为此,我有一个"跳跃"变量,它被添加到玩家的Y速度中.当按下"跳跃"键时,跳跃变量增加到设定值,一旦"跳跃"键释放,跳跃变量会迅速减小,但只要按住"跳跃"键,速度就会降低,从而提供连续加速只要你持有'跳跃'就可以了.这也是一个漂亮,流畅的跳跃,而不是一个视觉上不和谐,突然加速.
因此,为了考虑可变的楼梯高度,我希望能够精确计算"跳跃"变量应该获得的值,以便准确地跳到楼梯的高度; 优选不多,不少,但允许稍微多一点.通过这种方式,角色可以跳起陡峭或浅浅的楼梯,而不会看起来很奇怪或很慢.
基本上有5个变量在起作用:
h -the height the character needs to jump to reach the stair top<br>
j -the jump acceleration variable<br>
v -the vertical velocity of the character<br>
p -the vertical position of the character<br>
d -initial vertical position of the player minus final position<br>
Each timestep:<br>
j -= 1.5; //the jump variable's deceleration<br>
v -= j; //the jump value's influence on vertical speed<br>
v *= 0.95; //friction on the vertical speed<br>
v += 1; //gravity<br> …Run Code Online (Sandbox Code Playgroud)