如何从同步函数中调用异步函数。我不明白。
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;
};
checkCaseLastOpenActivity是异步函数。
问题在于,在异步完成之前调用返回结果。
我该如何解决这个问题?
答案 0 :(得分:1)
尽管代码可能看起来是同步的,但它仍然是异步函数。
您可能希望将showOpenCaseDialog
修改为一个async
函数,该函数将返回Promise<boolean>
。
async function showOpenCaseDialog(): Promise<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") {
result = await checkCaseLastOpenActivity(regardingobject);
}
}
return result;
};
答案 1 :(得分:0)
您可以在ES6中尝试诺言。
将异步部分包含在promise中,然后执行then部分的返回 请尝试以下代码
var promise1 = new Promise(> Xrm.Page.getAttribute(“ regardingobjectid”))。getValue())});
promise1.then((regardingobjectid){
if (regardingobjectid != null && regardingobjectid.length > 0) {
var regardingobject = regardingobjectid[0];
if (regardingobject.entityType === "incident") {
checkCaseLastOpenActivity(regardingobject).then(x => result = x);
}
});
或者您可以根据需要从函数中返回promise
有关更多详细信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
答案 2 :(得分:0)
asynFunction(var1, callback: (data)=> void) : any {
.....
this._service.apiCall(var1)
.subscribe(res=>{
.......
.......
return callback(res);
});
}
预期使用回调:
this.asyncFunction(value1, (res)=>{
........
........
});
不带回调的用法:
this.asyncFunction(value1, null);