异步函数将数据传递给异步函数

时间:2015-09-06 01:43:43

标签: javascript angularjs asynchronous ionic

我有以下代码:

//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()正常工作。

我也试过增加超时时间,但它不起作用。 有什么建议如何克服?

2 个答案:

答案 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);
       });
});