2015-10-06 30 views
0

基本上,我的应用程序是一个带有windows azure服务的PhoneGap应用程序,我用javascript调用了一个回调方法。请检查下面的代码。如何在javascript中调用异步函数

checkeventsRegistration = function (azureEid,regid,callback) { 
    alert(azureEid + " <> " + regid); 
    var client = new WindowsAzure.MobileServiceClient('https://mobbacktest.azure-mobile.net/', 'RvahPxHKoEsGiLdlCYZpHBllvSVQxl66'); 
    reglog = client.getTable('registrationlog'); 
    query = reglog.where({ eventid: azureEid, regid: regid }); 

    query.read().done(function (log) 
    { 
    alert("Log:" + log.length); 
    }); 
    callback(log.length); 
}; 

我将调用如下函数。

checkeventsRegistration(eid, regid, savenum); 

我的问题是这个回调方法是query().read()之前发射。

+0

中插入调用到中完成的声明(化名该功能) – JohnnyBeGoody

+0

移动'query.read()。完成(...)'回调里面的'callback'电话。 。 – Jite

+0

query.read()来完成(功能(日志) { 警报( “日志:” + log.length); \t回调(log.length);}; }); –

回答

1
query.read().done(function (log) 
{ 
    alert("Log:" + log.length); 
    callback(log.length); 

}); 

由于读取功能是同步,执行将直接进入下一行,而不会等待调用结果。另一方面,.done()接受两个调用,第一个onSuccess,第二个是onError。 因此,你应该在完成(function(){callback();})中调用你的回调函数

因为它没有工作,发送错误,可能你需要JSON.stringfy处理。

+0

添加一些解释给你的答案。 – HaveNoDisplayName

+0

虽然此代码块可能回答OP的问题,但如果您解释此代码与问题中的代码的不同之处和原因,以及为什么解决问题而不引入其他代码,则此答案会更有用。 – Mifeet

2

在外部函数中callback的用途是在异步操作完成时执行一些操作,因此您应该从done方法中调用它。

query.read().done(function (log){ 
    alert("Log:" + log.length); 
    callback(log.length); 
});