我有以下代码(我已经剥离和简化):
function myOrder() {
setLocation(); // sets a value for global variable 'location'
// using GET
$.post('http://111.111.111.111/order', {
Item: Chair,
Price: 50,
Location: location;
})
}
问题是此函数在setLocation()回调函数完成之前执行post()代码。
我需要首先完成setLocation()函数,因此它可以为' location'分配一个全局变量,然后将其用作POST部分中的值。
有人知道是否可以这样做吗?
由于
编辑:澄清: setLocation()是一个GET请求,它通过GPS获取当前位置并将其存储在全局变量名称' location'。
所以我认为发生的是在回调函数完成其GET响应之前的myOrder()方法POSTS。
答案 0 :(得分:2)
使用异步流程
{{1}}
答案 1 :(得分:1)
由于您没有提供setLocation
的实现,我假设您使用$.get
或类似的jQuery函数($.ajax
,$.getJSON
,... )。
在这种情况下,不要使用$.get
的回调函数,也不要将响应数据存储为全局变量,但返回 $.get(...)
因为它是一个承诺:
function setLocation() {
// Return the promise object returned by $.get, $.getJSON, $.ajax, ...
// instead of using the callback function, and don't store the result
// in a global variable
return $.get("myurl").then(function (data) {
// As you did not provide the code, this serves only as example. The
// way you extract the latitude and longitude from the response may be
// different. Adapt as needed:
data = JSON.parse(data);
var lat = data.result[0].lat;
var lng = data.result[0].lng;
// Return value will be the promised value: adapt the format as needed,
// This will become the location variable content in your other function
return { lat, lng };
});
}
function myOrder() {
// Use the `then` method on the jQuery promise, and return
// the result of the `then` method again, so you can chain
// on myOrder() as well...
return setLocation().then(function (location) {
// Return the `$.post` result:
return $.post('http://111.111.111.111/order', {
Item: Chair,
Price: 50,
Location: location;
});
});
}
答案 2 :(得分:0)
如果setLocation
函数是异步函数,则需要将其更改为在完成后接收回调函数。
function myOrder() {
setLocation(function() {
$.post('http://111.111.111.111/order', {
Item: Chair,
Price: 50,
Location: location
});
});
}
希望它有所帮助。