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);