等待节点js中函数或回调的返回值

Nir*_*aju -1 javascript callback node.js

我是节点js的新手,我正试图在这个节点js中设置一些变量

var perm1 = 0;
var perm2 = 0;
check_tasksAssigned(data,function(resp1) {
    perm1 = resp1;
});
check_projectMembers(data,function(resp2) {
    perm2 = resp2;
});

if(perm1 && perm2) {
    // do some db stuff here
}
Run Code Online (Sandbox Code Playgroud)

但我得到的不确定.我也试过这样的,

var perm1 = check_tasksAssigned(data,function(resp1) {

});
var perm2 = check_projectMembers(data,function(resp1) {

});

if(perm1 && perm2) {
    // do some db stuff here
}
Run Code Online (Sandbox Code Playgroud)

并尝试过这样,但结果在所有情况下都是一样的.

var perm1 = check_tasksAssigned(data);
var perm2 = check_projectMembers(data);

if(perm1 && perm2) {
    // do some db stuff here
}
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.

提前致谢

Ste*_*ett 5

欢迎来到异步编程:)

最好的方法是使用promises库.但是短版可能看起来像:

var perm1 = 0;
var perm2 = 0;
check_tasksAssigned(data,function(resp1) {
    perm1 = resp1;
    finish();
});
check_projectMembers(data,function(resp2) {
    perm2 = resp2;
    finish();
});

function finish() {
if(perm1 && perm2) {
    // do some db stuff here
}
}
Run Code Online (Sandbox Code Playgroud)

编辑

根据请求,使用promises,这段代码看起来像:

when.all([
  check_tasksAssigned(data)
    .then(function(resp1) {
      perm1 = resp1;
    }),
  check_projectMembers(data)
    .then(function(resp2) {
       perm2 = resp2;
    })
  ])
  .then(finish);
Run Code Online (Sandbox Code Playgroud)

但是有很多方法可以表达这一点,具体取决于确切的承诺库等.