Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么等待/异步的结果未定义?_Javascript_Express_Async Await - Fatal编程技术网

Javascript 为什么等待/异步的结果未定义?

Javascript 为什么等待/异步的结果未定义?,javascript,express,async-await,Javascript,Express,Async Await,我有这样一条路线: router.get("/my_resource", myController.getResult); 那么我的控制器就像: getResult: async (req, res, next) => { try { const param = req.query.param; let response = {}; if (param) { let [result1, result2] = await Prom

我有这样一条路线:

router.get("/my_resource", myController.getResult);
那么我的控制器就像:

getResult: async (req, res, next) => {
    try {
      const param = req.query.param;
      let response = {};
      if (param) {
        let [result1, result2] = await Promise.all([myModel.getResult1(param), myModel.getResult2(param)]);
        console.log(result1);
        console.log(result2);
      }
      res.send(response);
    } catch (e) { 
        next(e);
    }
  }
我的模型(查询mongodb)如下所示:

getResult1: (param) => {
    new Promise((resolve, reject) => {
      MongoSchema1.findById(param, (error, result) => {
        if (error) return reject(error);
        resolve(result ? result : {});
      }).select("field1 field2");
    })
  }

getResult2: (param) => {
  new Promise((resolve, reject) => {
    MongoSchema2.findById(param, (error, result) => {
      if (error) return reject(error);
      resolve(result ? result : {});
    }).select("field1 field2");
  })
}
在这里,当我在模型函数中尝试
console.log()
时,我可以看到结果不是
undefined
。我得到了正确的结果。但是,我可以看到控制器方法中的
console.log()
在模型方法中的
console.log()
之前执行


在上面的代码中,我与
Promise.all()
并行进行异步调用。但是,即使我尝试一次运行一个,我仍然会在controller方法中得到未定义的结果。我做错了什么?我需要导入任何模块才能等待?谢谢。

问题是您的方法
getResult1
getResult2
不返回
承诺
对象

替换

  getResult1: (param) => {
    new Promise((resolve, reject) => {
      MongoSchema1.findById(param, (error, result) => {
        if (error) return reject(error);

        resolve(result ? result : {});
      }).select("field1 field2");
    })
  }


originalMail
scrapresult
来自哪里?您只声明
result1
result2
,但从不使用它们。另外,您的
响应
始终是空对象。@Bergi,对不起,t应该是
result1
result2
。我更新了问题。非常感谢!我会在几分钟内接受答案,因为这里有锁。
  getResult1: (param) => {
    return new Promise((resolve, reject) => {
      MongoSchema1.findById(param, (error, result) => {
        if (error) return reject(error);
        resolve(result ? result : {});
      }).select("field1 field2");
    });
  }
  getResult1: param => new Promise((resolve, reject) => {
      MongoSchema1.findById(param, (error, result) => {
        if (error) return reject(error);

        resolve(result ? result : {});
      }).select("field1 field2"));
  }
getResult1: async param => (await MongoSchema1.findById(param).select('field1 field2')) || {};
getResult1: async param => (await MongoSchema1.findById(param, 'field1 field2')) || {};