【问题标题】:looping node array of asynchronous functions异步函数的循环节点数组
【发布时间】:2018-04-14 07:09:59
【问题描述】:

下面的代码节点给出了未定义的如何从包含异步函数的数组中获取 console.log。我尝试了承诺,但我还是做不到

const fs = require("fs");
const path = require("path")
var req = {},
  res = {},
  previous = {};
var reqOBj = [];
var use = function(fun) {
  reqOBj.push(fun)
}
use(function(req, res, previous) {
  fs.readFile(path.join(__dirname, "/index.html"), "utf8", function(err, data) {
    if (err) {
      return false;
    } else {
      return previous;
    }
  })
})
use(function(req, res, previous) {
  previous.mid = '2nd';
  return previous;
})
for (let index = 0; index < reqOBj.length; index++) {
  console.log(reqOBj[index](req, res, previous));
}

【问题讨论】:

    标签: javascript arrays loops


    【解决方案1】:

    reqOBj中的函数转换为返回promise的函数,然后await底部循环中promise的解析:

    use(function(req, res, previous){
      return new Promise((resolve, reject) => {
        fs.readFile(path.join(__dirname , "/index.html"), "utf8", function(err, data){
          if(err) reject();
          else resolve(previous)
        });
      });
    });
    use(function(req, res, previous){
      previous.mid = '2nd';
      return previous;
    });
    (async () => {
      for (let index = 0; index < reqOBj.length; index++) {
        console.log (await reqOBj[index](req, res, previous));
      }
    })();
    

    【讨论】:

    • 我收到此错误(节点:12636)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):ReferenceError:未定义 reqOBj(节点:12636)[DEP0018] DeprecationWarning:未处理的承诺拒绝是已弃用。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
    • 这没有意义,您在脚本顶部定义了reqOBj...
    • 你觉得我应该怎么处理
    • 听起来要么您没有忠实地发布原始代码,要么您错误地粘贴了新代码。我发布的 sn-p 应该替换您声明 use 下方的所有内容。
    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多