TypeScript从同步函数调用异步函数并返回布尔值
如何从同步函数调用异步函数。我不明白TypeScript从同步函数调用异步函数并返回布尔值,typescript,asynchronous,synchronous,Typescript,Asynchronous,Synchronous,如何从同步函数调用异步函数。我不明白 function showOpenCaseDialog(): boolean { let result = false; var regardingobjectid = (<Xrm.LookupAttribute<string>>Xrm.Page.getAttribute("regardingobjectid")).getValue(); if (regardingobjectid != null &
function showOpenCaseDialog(): boolean {
let result = false;
var regardingobjectid = (<Xrm.LookupAttribute<string>>Xrm.Page.getAttribute("regardingobjectid")).getValue();
if (regardingobjectid != null && regardingobjectid.length > 0) {
var regardingobject = regardingobjectid[0];
if (regardingobject.entityType === "incident") {
checkCaseLastOpenActivity(regardingobject).then(x => result = x);
}
}
return result;
};
函数showOpenCaseDialog():布尔值{
让结果=假;
var regardingobjectid=(Xrm.Page.getAttribute(“regardingobjectid”).getValue();
if(regardingobjectid!=null&®ardingobjectid.length>0){
var regardingobject=regardingobject[0];
如果(关于Object.entityType==“事件”){
检查CaseLastOpenActivity(关于对象),然后(x=>result=x);
}
}
返回结果;
};
checkCaseLastOpenActivity是异步函数
问题是,在异步完成之前调用返回结果
如何解决这个问题?您可以尝试ES6中的承诺 将异步部分包含在承诺中,并执行来自该部分的返回 请尝试以下代码 var promise1=新承诺(>Xrm.Page.getAttribute(“regardingobjectid”).getValue())}) 或者,如果需要,可以从函数中返回承诺本身 有关更多详细信息,请参阅
尽管代码可能看起来是同步的,但它仍然是一个异步函数 您可能希望将
showOpenCaseDialog
修改为async
函数,该函数将返回Promise
异步函数showOpenCaseDialog():Promise{
让结果=假;
var regardingobjectid=(Xrm.Page.getAttribute(“regardingobjectid”).getValue();
if(regardingobjectid!=null&®ardingobjectid.length>0){
var regardingobject=regardingobject[0];
如果(关于Object.entityType==“事件”){
结果=等待checkCaseLastOpenActivity(关于对象);
}
}
返回结果;
};
预期回调的用法:
this.asyncFunction(value1, (res)=>{
........
........
});
this.asyncFunction(value1, null);
不带回调的用法:
this.asyncFunction(value1, (res)=>{
........
........
});
this.asyncFunction(value1, null);
this.asyncFunction(value1, null);