84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
现在我有step1, step2,step3,step4四个操作,都用promise了逻辑是只要有一个step成功就返回,不用执行下面的操作,有一个失败,就执行下面的操作,例如,step1失败,执行step2,如果成功,就不用执行下面的step3了
以上操作用promise如何写比较好呢?
欢迎选择我的课程,让我们一起见证您的进步~~
成功了reject的方案中,你需要找到一个办法区分成功流程,和代码运行过程中发生的错误。
比如step3里面出现了一个无法预估的异常,抛出了一个错误,这个时候对正常流程的处理和对异常流程的处理都混在promise给你提供的对异常流程的接口中了。
不要用异常处理逻辑来做正常处理流程,这个规则保证了代码可读性与可维护性。
用promise的方案很简单。此外,正常处理流程(console.log("Done"))和异常处理流程(console.error("Done, but all failed"))可以清晰地分辨出:
console.log("Done")
console.error("Done, but all failed")
console.log("start") step1() .catch(step2) .catch(step3) .catch(step4) .then(() => console.log("Done")) .catch(() => console.error("Done, but all failed"))
切换step1、step2……的返回就可以查到所有流程:
function step1(){ console.log(1); return Promise.reject(); } function step2(){ console.log(2); return Promise.resolve(); } function step3(){ console.log(3); return Promise.resolve(); } function step4(){ console.log(4); return Promise.resolve(); }
成功的话就reject。(仅参考,不建议这样写)
这个情况用async+await大法好
async
await
var p1 = new Promise(function (resolve, reject) { // ... }); var p2 = new Promise(function (resolve, reject) { // ... resolve(p1); })
嗯 楼上说的对 用async function比较方便
async function
// 假设步骤如下 const api = 'http://api.hitokoto.cn/?c=a' const asyncFunctions = { async step1() { return await fetch(api).then(res => res.json()) }, async step2() { return await fetch(api).then(res => res.json()) }, async step3() { return await fetch(api).then(res => res.json()) }, async step4() { return await fetch(api).then(res => res.json()) }, } ;(async () => { let result = null for(let step in asyncFunctions) { try { result = await asyncFunctions[step]() break } catch(err) { console.error(err) } } console.info(result) })()
说用race的应该是没理解需求,需求是说,step1如果失败才执行step2,如果用race就都会执行了。@不爱吃西红柿的鱼
成功了reject的方案中,你需要找到一个办法区分成功流程,和代码运行过程中发生的错误。
比如step3里面出现了一个无法预估的异常,抛出了一个错误,这个时候对正常流程的处理和对异常流程的处理都混在promise给你提供的对异常流程的接口中了。
不要用异常处理逻辑来做正常处理流程,这个规则保证了代码可读性与可维护性。
用promise的方案很简单。此外,正常处理流程(
console.log("Done")
)和异常处理流程(console.error("Done, but all failed")
)可以清晰地分辨出:切换step1、step2……的返回就可以查到所有流程:
成功的话就reject。(仅参考,不建议这样写)
这个情况用
async
+await
大法好嗯 楼上说的对 用
async function
比较方便说用race的应该是没理解需求,需求是说,step1如果失败才执行step2,如果用race就都会执行了。
@不爱吃西红柿的鱼