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)。我也试过了,但没有用。我得到了同样的结果。