我正在尝试对我的节点js代码中的函数进行同步调用。
我正在调用我的函数
set_authentication();
set_file();
function set_authentication(){
---
callback function
---
}
我希望我的set_authentication()函数首先完全执行,然后set_file()应该开始执行,但set_file()函数在set_authentication()的回调之前开始执行。
我也尝试使用async,如
async.series(
[
// Here we need to call next so that async can execute the next function.
// if an error (first parameter is not null) is passed to next, it will directly go to the final callback
function (next) {
set_looker_authentication_token();
},
// runs this only if taskFirst finished without an error
function (next) {
set_view_measure_file();
}
],
function(error, result){
}
);
但它也不起作用。
我也尝试过承诺
set_authentication().then(set_file(),console.error);
function set_authentication(){
---
callback function
var myFirstPromise = new Promise((resolve, reject) => {
setTimeout(function(){
resolve("Success!");
}, 250);
});
---
}
这里我收到了这个错误: - 无法读取未定义的属性'然后'。
我是node和js的新手。
答案 0 :(得分:3)
您需要返回Promise,因为您调用了返回承诺的.then
方法:
set_authentication().then(set_file);
function set_authentication() {
return new Promise(resolve => { // <------ This is a thing
setTimeout(function(){
console.log('set_authentication() called');
resolve("Success!");
}, 250);
});
}
function set_file(param) {
console.log('set_file called');
console.log(
'received from set_authentication():', param);
}
答案 1 :(得分:1)
如果set_authentication
是异步功能,则需要将set_file
作为回调传递给set_authentication
函数。
您也可以考虑在编写时使用promises,但是在开始链接之前需要实现它。
答案 2 :(得分:0)
像这样使用async.auto
:
async.auto(
{
first: function (cb, results) {
var status=true;
cb(null, status)
},
second: ['first', function (results, cb) {
var status = results.first;
console.log("result of first function",status)
}],
},
function (err, allResult) {
console.log("result of executing all function",allResult)
}
);