gpt4 book ai didi

javascript - 如何触发两个 Promise 并有条件地等待一个?

转载 作者:行者123 更新时间:2023-11-28 18:23:13 25 4
gpt4 key购买 nike

例如:我正在访问网站的“创建新帐户”页面。在创建帐户之前,我需要确定给出的电子邮件是否是垃圾电子邮件(即 test@test.com)。我还需要确定帐户是否已经存在,返回应该使用而不是新帐户的可能帐户列表(也许地址已经存在,等等)这些定义如下:

function emailIsValid(): JQueryPromise<boolean> { ... }
function getPotentialDuplicates(): JQueryPromise<IDupResults> { ... }

假设,getPotentialDuplicates 调用必须检查一个非常旧的数据库,该数据库速度非常慢,需要 3-5 秒才能完成,而 emailIsValid 通常需要 0.4 秒秒。因此,我想同时关闭这两个调用,并由该操作树定义结果:

  • 如果 - getPotentialDuplicates 首先返回:
    • 等待emailIsValid返回
    • 如果 - 电子邮件有效:
      1. 如果 - 未找到重复项,则创建帐户
      2. 否则 - 向用户显示重复项。
    • 否则 - 忽略 dupResults 并显示“电子邮件无效”
  • Else - emailIsValid 返回第一个:
    • 如果 - 电子邮件有效:
      1. 等待getPotentialDuplicates
      2. 如果 - 未找到重复项,则创建帐户
      3. 否则 - 向用户显示重复项。
    • 否则 - 不要等待 getPotentialDuplicates 并显示“电子邮件无效”

目前我正在使用 when.done 但这会等待两者完成。有没有一个简单的方法来定义它?

最佳答案

在这两种情况下,您都想等待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 Promise 并使用标准 Promise api。我有关于标准文档:https://basarat.gitbooks.io/typescript/content/docs/promise.html

关于javascript - 如何触发两个 Promise 并有条件地等待一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39604259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com