【发布时间】:2017-12-21 12:46:35
【问题描述】:
在下面的函数中,我试图返回第二个异步调用的承诺对象,但是打字稿抱怨该函数必须返回一个值。我不知道我怎么能做到这一点?我如何返回第二个承诺?
private getSalesUrl<TServiceInput>(serviceCall: (args: TServiceInput) => JQueryPromise<IServiceResponseT>, args): JQueryPromise<any> {
serviceCall(args).done(result => { //1st async call
if (result.serviceOutput) {
if (result.serviceOutput.key === "URL") {
return tipsInterop.executeSalesRequest(result.serviceOutput.value); //2nd async call
}
}
});
}
【问题讨论】:
-
return在serviceCall()的done回调中。您需要return serviceCall(...)才能让 serviceCall 返回内部返回... -
如果我返回 serviceCall,那么 getSalesUrl.done() 将在第一个异步调用的上下文中执行。我希望 getSaleUrl.done() 在第二次异步调用的上下文中执行。
-
A) 永远不要使用
done或fail,始终使用then。 B) 你实际上并没有从getSalesUrl返回任何东西,你只是从 done 回调中返回了return -
@Bergi 我同意我现在没有返回任何东西,但是我如何返回第二个承诺?你能帮忙吗?
-
@NirbhayJha 你不能。但是using
thenwill create a new promise that resolves with the inner result.
标签: jquery typescript promise