例如:我正在为网站创建“创建新帐户”页面。在创建帐户之前,我需要确定给出的电子邮件是否是垃圾邮件(即test@test.com)。我还需要确定帐户是否已经存在,返回一个应该使用的可能帐户列表而不是新帐户(可能已经存在的地址等)。这些定义如下:
function emailIsValid(): JQueryPromise<boolean> { ... }
function getPotentialDuplicates(): JQueryPromise<IDupResults> { ... }
假设,假设getPotentialDuplicates
调用必须检查一个非常慢的旧数据库,需要3-5秒才能完成,而emailIsValid
通常需要0.4秒。因此,我想同时关闭这两个调用,此结果由此操作树定义:
getPotentialDuplicates
首先返回:
emailIsValid
返回emailIsValid
返回第一个:
getPotentialDuplicates
getPotentialDuplicates
并显示“电子邮件无效”目前我正在使用when.done
,但这等待两者完成。有没有一种简单的方法来定义它?
答案 0 :(得分:3)
在您的两种情况下,您都要等待emailIsValid
。所以:
// kick off both
const emailIsValidProm = emailIsValid();
const getPotentialDuplicatesProm = getPotentialDuplicates();
emailIsValidProm.then((res)=> {
if (res.invalid) { // if res in valid
return;
}
else {
// now wait for the other
return getPotentialDuplicatesProm
}
})
.then(res=> {
if (!res) return; // email wasn't valid;
// The res is for `getPotentialDuplicatesProm
// USE it !
})
PS:强烈建议不要使用Jquery promises并使用标准的Promise api。我有关于标准文档的文档:https://basarat.gitbooks.io/typescript/content/docs/promise.html