我有以下代码:
//calling AsyncFunction
var coords = LocationSerivice.getLocation();
var localStores;
setTimeout(function(){
//works
console.log(coords);
//calling async function again
localStores = LocalStoresService.getLocalStores(coords[0],coords[1]);
}, 100);
setTimeout(function(){
//doesn't work
console.log(localStores);
}, 100);
我要做的是首先调用返回我的位置的异步函数。然后,为了从该函数获取数据,我设置超时。收到数据后,我正在调用第二个异步功能。我再次设置超时以便从我的第二个异步函数中获取数据,所以这里失败了。如果我尝试在超时块中显示console.log()
的数据,则表示undefined
,而第一个超时块中的console.log()
正常工作。
我也试过增加超时时间,但它不起作用。 有什么建议如何克服?
答案 0 :(得分:0)
您可以修改LocalStoresService.getLocalStores
方法以接受回调。
function getLocalStores (arg1, arg2, cb) {
// do stuff.
var localStores = 'w/e';
if (typeof cb === 'function') return cb(localStores);
}
所以你的调用方法看起来像这样:
var coords = LocationService.getLocation();
LocalStoresService.getLocalStores(coords[0], coords[1], function (localStores) {
console.log(localStores); // 'w/e'
});
这实际上取决于您使用的技术类型,因为"正确"异步方法的实现因类型而异(AngularJS,NodeJS,vanilla JS等)。
答案 1 :(得分:0)
据我所知,您的项目可能正在使用angularjs,我基于此给出了示例,
.factory('LocationSerivice', function ($http) {
return{
getLocation : function () {
return $http.get('location_api');
};
getLocalStores : function(coords){
return $http.get('your_local_store_api');
};
}
});
现在请致电您的API
LocationService.getLocation().success(function(coords){
LocationService.getLocalStores(coords).success(function(localStores){
console.log(localStores);
});
});