簡體   English   中英

節點 js async.parallel 與等待可能嗎?

[英]node js async.parallel with await possible?

我在節點 js 中遇到了 async.parallel 的問題。 以下代碼運行完美

  var data = {};

  data.task_1= function(callback) { 
    var res_1 = "hello 1";
    callback(null, res_1);
  }
  data.task_2 = function(callback) { 
    var res_2 = "hello 2";
    callback(null, res_2);
  }

  async.parallel(data, function(err, results) {
    if (err){
      console.log(err);
    }
    console.log(results);
  });

結果是: { task_1: 'hello 1', task_2: 'hello 2' }

但是,如果我嘗試使用 function 從數據庫調用數據來執行任務,我會出現以下錯誤: TypeError: callback is not a function and the result { task_2: 'hello 2', task_1: undefined }

我在日志中看到,在記錄 json 文件之前檢索了數據。

這是我的代碼:

  var data = {};

  data.task_1 = async function(callback) { 
    var res_1 = await getData("xyz");
    console.log(res_1);
    callback(null, res_1);
  }
  data.task_2 = function(callback) { 
    var res_2 = "hello 2";
    callback(null, res_2);
  }

  async.parallel(data, function(err, results) {
    if (err){
      console.log(err);
    }
    console.log(results);
  });

我想念什么? 謝謝你的幫助!

您可以從 getData() 返回結果,這應該有效(根據文檔): https://caolan.github.io/async/v3/global.html#AsyncFunction ,您也可以使用 await 語句:

var data = {};

data.task_1 = async function() { 
    var res_1 = await getData("xyz");
    console.log(res_1);
    return res_1;
}
data.task_2 = function(callback) { 
    var res_2 = "hello 2";
    callback(null, res_2);
}

async.parallel(data, function(err, results) {
    if (err){
        console.log(err);
    }
    console.log(results);
});

我相信這是因為如果我們將 function 標記為異步,則不會傳遞任何回調。 So if I assign a non-async function and use.then(), the callback will be passed and all will work nicely: From the docs, "Wherever we accept a Node-style async function. we also directly accept an ES2017 async function , 在這種情況下。異步 function 將不會傳遞最終回調參數”這解釋了錯誤消息“回調不是函數”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM