从cordova中的计时器函数内调用javascript函数

从cordova中的计时器函数内调用javascript函数,javascript,jquery,cordova,Javascript,Jquery,Cordova,我正试图把几个函数放在一起,这些函数调用RESTAPI来获得一个ID,然后使用这个ID发布到另一个API,我遇到了主要的障碍。我尝试过回调和承诺,但是没有用,我用来请求ID的第一个函数在第二个函数执行之前没有执行,因此$post失败。我已经求助于使用setTimout,这看起来可能会解决这个问题,但由于某些原因,我无法从计时器函数中调用不同的函数。有人能告诉我哪里出了问题吗?谢谢你的帮助 var timerVariable; this.placeNewOrder = function(){

我正试图把几个函数放在一起,这些函数调用RESTAPI来获得一个ID,然后使用这个ID发布到另一个API,我遇到了主要的障碍。我尝试过回调和承诺,但是没有用,我用来请求ID的第一个函数在第二个函数执行之前没有执行,因此$post失败。我已经求助于使用setTimout,这看起来可能会解决这个问题,但由于某些原因,我无法从计时器函数中调用不同的函数。有人能告诉我哪里出了问题吗?谢谢你的帮助

var timerVariable;

this.placeNewOrder = function(){
    this.newOrder();
    timerVariable = setTimeout(this.orderTimer, 1000);
};

this.newOrder = function(){
    //code to set currentOrderId
    return currentOrderId
    alert("got Id");
};

orderTimer = function(){
    this.postOrderItems();//this call never seams to call the function
};

this.postOrderItems = function(){
    alert("postOrderItems called");//, orderId: " + currentOrderId);
    //code to $post in here
};

将上下文保存在orderTimer中的方法是绑定它:

timerVariable = setTimeout(this.orderTimer.bind(this), 1000);

它解决了您当前面临的问题,但却是解决原始问题的错误方法。

我怀疑
通过
setTimeout调用该方法时,此
不是您所认为的。如果使用
apply
,则可以设置函数的上下文。太棒了,谢谢!我错过了上面orderTimer函数中的“this”,但同时发现,它现在起作用了,谢谢!