Javascript 即使在添加async/await之后,代码也不会异步执行

Javascript 即使在添加async/await之后,代码也不会异步执行,javascript,asynchronous,async-await,async.js,Javascript,Asynchronous,Async Await,Async.js,在以下代码中: let getIVoneDay = async (symbol, option, date, exp_date, strike) => { let close_ce = await getCE(symbol, option, date, exp_date, strike); const close_pe=await getPE(symbol, option, date, exp_date, strike); const close_xx= await getXX

在以下代码中:

let getIVoneDay = async (symbol, option, date, exp_date, strike) => {
  let close_ce = await getCE(symbol, option, date, exp_date, strike);
  const close_pe=await getPE(symbol, option, date, exp_date, strike);
  const close_xx= await getXX(symbol, option, date, exp_date, strike);
  console.log(close_ce,close_pe,close_xx);
};
我得到了价值

undefined undefined undefined
这三个函数接受一些参数,在DB中进行查询,并返回一个花费一点时间的值。因此,我尝试将它与async/await结合使用,但得到了相同的结果。我该怎么做?我也尝试过同样的回调,得到了同样的结果

致电:

var x = getIVoneDay("ACC", "CE", "2020-01-01", "2020-01-30", 1220);
获取函数:

let getPE = (symbol, option, date, exp_date, strike) => {
  var collection_pe = symbol + ".PE";
  var model_pe = mongoose.model("model_pe", bhavcopySchema, collection_pe);
  model_pe
    .find({
      SYMBOL: symbol,
      STRIKE_PR: strike,
      OPTION_TYP: "PE",
      EXPIRY_DT: new Date(exp_date),
      TIMESTAMP: new Date(date),
    })
    .exec((err, result) => {
      let close_pe = result[0].CLOSE.value;
      console.log(close_pe);
      return close_pe;
    });
};
注:getCE()和其他函数内部的print打印正确的值。

您的函数
getPE()
实际上不是异步函数。没有返回值

您应该将其更改为返回如下承诺:

let getPE = (symbol, option, date, exp_date, strike) => {
  var collection_pe = symbol + ".PE";
  var model_pe = mongoose.model("model_pe", bhavcopySchema, collection_pe);
  // Return the promise
  return model_pe
    .find({
      SYMBOL: symbol,
      STRIKE_PR: strike,
      OPTION_TYP: "PE",
      EXPIRY_DT: new Date(exp_date),
      TIMESTAMP: new Date(date),
    })
    .exec((err, result) => {
      let close_pe = result[0].CLOSE.value;
      console.log(close_pe);
      return close_pe;
    });
};

更改get函数,如以下代码,因为它不是
async
函数:

let getPE = async (symbol, option, date, exp_date, strike) => {
  var collection_pe = symbol + ".PE";
  var model_pe = mongoose.model("model_pe", bhavcopySchema, collection_pe);
  // Return the promise
  try {
    let result = await model_pe.find({
      SYMBOL: symbol,
      STRIKE_PR: strike,
      OPTION_TYP: "PE",
      EXPIRY_DT: new Date(exp_date),
      TIMESTAMP: new Date(date),
    })
    let close_pe = result[0].CLOSE.value;
      console.log(close_pe);
      return close_pe;
  } catch (error) {
    throw error
  }
};

如何调用getIVoneDay()?“这三个函数接受一些参数,在DB中进行查询并返回一个需要花费一点时间的值。”它们是返回承诺还是只接受回调?尽管您的API可能已经支持另一种promise接口,但请参见。似乎您需要更深入地了解您的函数,并检查它们返回未定义的原因。将日志放入其中并进行检查,可能是您的数据库返回未定义以及原因不是异步的/await@Alex请检查编辑。
getPE
未返回任何内容。它应该返回一个
承诺
(参见@VLAZ comment)。我也试过了,但没有用。我得到了同样的结果。