Node.js异步并行不工作应该如何?

时间:2016-05-27 01:57:18

标签: javascript node.js asynchronous promise

我有多个promise'我想要一个接一个地运行,而且我不确定我是否想要回复承诺,因为它变得非常混乱!

所以我决定使用async库并实现parallel方法。现在我注意到我的所有承诺都没有一个接一个地运行,相反,他们正在做承诺假设todo(运行+完成任何时候)。

我注意到所有的console.log都在所有承诺完成之前运行。

async.parallel([
        (cb) => {
          console.log ("hi")
            grabMeData (Args)
              .then ( (data) => {

                // The promise is done and now I want to goto the next functio
                cb();
              }).catch(()=>console.log('err'));
        },
        (callback) => {
          // The above promise is done, and I'm the callback
          Query.checkUserExists()
          .then ( () => {
            if (Query.error) {
              console.log (Query.error); // Determine error here
              return; // Return to client if needed
            }
            callback();
          });
        },
        () => {
          // The above promise is done and I'm the callback!

          // Originally wanted to be async
          if (Query.accAlreadyCreated) {
            this.NewUserModel.user_id = Query.user_id;
            this.generateToken();
          } else {
            console.log ("account not created");
          }
          console.log ('xx')
        }
    ], () =>{
      console.log ("finished async parallel")
    });

我的回调正在运行的任何原因before承诺得到解决(.then)。

1 个答案:

答案 0 :(得分:2)

像Bergi说的那样,当你使用promise时async.js是多余的,你的代码可以简化为:

console.log('hi')
grabMeData(Args)
  .catch(e => console.error(e))
  .then(() => Query.checkUserExists())
  .then(() => {
    if (Query.accAlreadyCreated) {
      this.NewUserModel.user_id = Query.user_id
      return this.generateToken()
    } 
    console.log ("account not created")   
  })
  .then(() => console.log ('xx')  )