我有一个功能:
function collect_user_balance() {
userBalance = 0;
try {
var args = {
param: 'name';
};
mymodule_get_service({
data: JSON.stringify(args),
success: function (result) {
userBalance = result['0']; //here i am getting the balance as userBalance through service//
}
});
} catch (error) {
mymodule_error(error)
}
}
要求是在其他功能中获得用户平衡,userBalance。
像
这样的东西var getbal = collect_user_balance();
我对JavaScript和这类事情都很陌生。我怎么能这样做?
答案 0 :(得分:1)
问题是mymodule_get_service
是一个异步函数。这意味着它允许代码运行后即使它自己还没有完成。完成后,它将执行success
功能。但是当它完成时,collect_user_balance
已经完成并且这一行:
var getbal = collect_user_balance();
已经发生得太早了。要修复它,您需要让collect_user_balance()
接受一个回调函数,该函数将被调用以让调用者知道信息何时就绪。这可能很难集成,但这就是混合同步和异步代码时会发生的情况。一个例子:
function collect_user_balance (callback) {
try {
var args = {
param: 'name';
};
mymodule_get_service({
data: JSON.stringify(args),
success: function (result) {
callback(result['0']); //here i am getting the balance as userBalance through service
}
});
} catch (error) {
mymodule_error(error)
}
}
然后,你会这样称呼它:
collect_user_balance(function (userBalance) {
// do useful stuff with userBalance
});
答案 1 :(得分:0)
试试这个:
function collect_user_balance() {
userBalance = 0;
try {
var args = {
param: 'name';
};
mymodule_get_service({
data: JSON.stringify(args),
success: function (result) {
userBalance = result['0']; //here i am getting the balance as userBalance through service//
}
});
} catch (error) {
mymodule_error(error)
}
return userBalance;
}
您只需要返回var值: return userbalance;
我希望这可以帮到你
答案 2 :(得分:0)
最好避免这样的电话,因为它可能会损害等待服务的应用程序的性能。
如果您仍然需要这样的功能,则需要使该功能同步。 在jquery中调用ajax时。我们可以使用一个名为async的属性,默认情况下为true,必须设置为false以使调用同步。
function collect_user_balance() {
userBalance = 0;
try {
var args = {
param: 'name';
};
jQuery.ajax({
url: "http://someurl.com/ws",
data: JSON.stringify(args),
success: function(data) {
userBalance = (int)data;
},
async:false
});
}
catch (error) {
mymodule_error(error)
}
return userBalance ;
}
请注意我没有测试过代码。让我知道它是否有错误