繁体   English   中英

如何依次执行3个异步函数?

[英]how can I execute 3 asynchronous functions in order?

这是代码:

adjust_geo = function(callback){Plasma.Hose('edge-to-sluice').Deposit({
          "descrips": [
            "sluice",
            "prot-spec v1.0",
            "request",
            "zoom"
          ],
          "ingests": {
            "lat": stickie.latitude,
            "lon": stickie.longitude,
            "level": stickie.zoom_level
          }
        });
        Plasma.Hose('edge-to-sluice').Deposit({
          "descrips": [
            "sluice",
            "prot-spec v1.0",
            "request",
            "set-time"
          ],
          "ingests": {
            "time": stickie.start,
            "rate": 2.0,
            "pause": false
          }
        });
        callback();
        }        

         var remove_stickies = function(callback){      
           Plasma.Hose('edge-to-sluice').Deposit({ descrips: ['sluice', 'prot-spec v1.0', 'request', 'remove-all-fluoro'], ingests : {}
        });
        callback();
        }   


        deposit_fluoros = function(){
        console.log(stickie.fluoroscopes);
        L = JSON.parse(stickie.fluoroscopes);
        console.log(L);
        for (var i = 1; i<L.length;i++){
                console.log(L[i]);                
                 Plasma.Hose('tcp://localhost/edge-to-sluice')
                        .Deposit({
                          "descrips": [
                            "sluice", 
                           "prot-spec v1.0",
                            "request",
                            "new-fluoro-instance"], 
                           "ingests":L[i] 
                       }); 
                };
          } 
          }  
     adjust_geo(remove_stickies(deposit_fluoros()));

正如您在最后一行看到的那样,我试图依次执行这三个异步函数。 但是现在,它抱怨第34行的callback()未定义。 TypeError:未定义不是函数。 这很奇怪,因为它似乎并不在乎Adjust_geo中的那个?

最后一行存在问题(您必须传递回调函数,而不能进行函数调用),并且您已经将回调传递给所有函数,或者检查是否传递了回调:

adjust_geo(
  function(){
    remove_stickies(
      deposit_fluoros
    )
  });

这将通过回调调用adjust_geo ,而回调将调用remove_stickies ,回调将调用deposit_fluors

如果Plasma.Hose('...').Deposit看起来像Plasma.Hose('...').Deposit(data, doneCallback) ,则可以通过将下一个函数调用移至doneCallback来更新代码以按顺序运行函数:

adjust_geo = function(callback) {
    Plasma.Hose('edge-to-sluice').Deposit({
            "descrips": [
                "sluice",
                "prot-spec v1.0",
                "request",
                "zoom"
            ],
            "ingests": {
                "lat": stickie.latitude,
                "lon": stickie.longitude,
                "level": stickie.zoom_level
            }
        },
        function() {
            Plasma.Hose('edge-to-sluice').Deposit({
                "descrips": [
                    "sluice",
                    "prot-spec v1.0",
                    "request",
                    "set-time"
                ],
                "ingests": {
                    "time": stickie.start,
                    "rate": 2.0,
                    "pause": false
                }
            }, callback)
        }
    );
}

var remove_stickies = function(callback) {
    Plasma.Hose('edge-to-sluice').Deposit({
        descrips: ['sluice', 'prot-spec v1.0', 'request', 'remove-all-fluoro'],
        ingests: {}
    }, callback);
}


deposit_fluoros = function() {
    console.log(stickie.fluoroscopes);
    L = JSON.parse(stickie.fluoroscopes);
    console.log(L);
    for (var i = 1; i < L.length; i++) {
        console.log(L[i]);
        Plasma.Hose('tcp://localhost/edge-to-sluice')
            .Deposit({
                "descrips": [
                    "sluice",
                    "prot-spec v1.0",
                    "request",
                    "new-fluoro-instance"
                ],
                "ingests": L[i]
            });
    };
}
}

adjust_geo(
    function() {
        remove_stickies(
            deposit_fluoros
        )
    });

更改您的最后一行以阅读

adjust_geo(remove_stickies(deposit_fluoros));

当前执行操作的方式是传递deposit_fluoros的结果,而不是传递对该函数的引用。

删除了所有其他对象,只是普通的回调。 放回您的对象,它将起作用。 每当您返回或调用回调时,关键规则均应确保将其作为函数返回。

var adjust_geo = function (callback) {

    callback();
    console.log('adjust_geo');
}
// wrap the result of first call into a function and return it
var remove_stickies = function (callback) {
    return function () {
        callback()
        console.log('remove_stickies');
    };
}


var deposit_fluoros = function () {
    console.log('deposit_fluoros')
};

adjust_geo(remove_stickies(deposit_fluoros));

输出:

"deposit_fluoros"
"remove_stickies"
"adjust_geo"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM