[英]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.