Javascript typescript承诺:仅在异步函数中允许使用“await”表达式
我创建了以下代码来获取一些数据,我在函数中返回这些数据,并在变量中调用该函数,如下所示:Javascript typescript承诺:仅在异步函数中允许使用“await”表达式,javascript,typescript,callback,promise,Javascript,Typescript,Callback,Promise,我创建了以下代码来获取一些数据,我在函数中返回这些数据,并在变量中调用该函数,如下所示: let tmsValue = await GetTMS(fymcl,this.model); console.log("tmsValue",tmsValue); let tms; var GetTMS = async function getTMS(yearMetricCombo, modelData) : Promise<any>{ return new P
let tmsValue = await GetTMS(fymcl,this.model);
console.log("tmsValue",tmsValue);
let tms;
var GetTMS = async function getTMS(yearMetricCombo, modelData) : Promise<any>{
return new Promise((resolve, reject)=>{
modelData
.query("11111")
.where("fymcl").equals(yearMetricCombo) // tm|FY18|Promtions
.loadAll()
.exec((error, data) => {
if (error) {
reject(error);
} else {
tms = String(data.Items[0].attrs.uploadtms);
resolve(tms);
// console.log("tms",tms); // iam getting value over here
}
});
return tms;
});
}
问题是让tmsValue=wait GetTMSfymcl,this.model;//这一行表示“await”表达式只允许在异步函数中使用
我不确定我需要做什么。该函数不返回:
function GetTMS(yearMetricCombo, modelData){
// NO RETURN STATEMENT HERE
modelData
.query("11111")
.where("fymcl").equals(yearMetricCombo) // tm|FY18|Promtions
.loadAll()
.exec((error, data) => {
console.log("error",error);
if (error) {
} else {
let tms = String(data.Items[0].attrs.uploadtms);
console.log("tms",tms);
// this returns from the *arrow function*, not
// the enclosing function declaration
return tms;
}
});
// NO RETURN STATEMENT HERE
}
有关如何从异步调用返回的问题,请参见@CRice注释中链接的问题您的函数GetTMS没有return语句,因此该函数隐式返回undefined。它看起来像是在进行一个异步db调用,所以您可能希望在这里使用承诺。看一看,我已经用promise更新了,但是现在它说的wait只能在异步函数中使用实际上,wait关键字只能在用async关键字声明的函数中使用。这意味着它不能出现在文件的根级别。如果需要在文件的根目录下使用getTMS函数,则必须将使用其结果的代码放入.then promise回调函数中。如果您需要在另一个函数中使用getTMS,您需要使用前面提到的.then方法,或者将该函数标记为async。我已经将其标记为async,您可以在我的代码中进行一些更新以包含它吗?那么为什么我需要顶部的return语句?您不需要,我只是列出了返回语句可能是但不是的两个地方。这与他们询问的OP错误无关。OP的错误是因为他们试图在异步定义的函数之外使用wait,而您不能这样做。这是使用await.OP的一个核心要求,自从我发布以下内容以来,它已被大量编辑:\