如题,遇到一个棘手的问题,基础不扎实的我来请教一下。
是这样的需要实现一个功能伪代码如下
if(情况 A ){
axios 请求接口 A.then(res=>){
if(xxx){
return //这里的 return 无法结束下面情况 B 和情况 C,还是会继续执行,因为这里是异步
}
}
}
if(情况 B ){
...
}else if(情况 C ){
...
}
现在的问题是,axios 请求接口 A 的数据只可以使用 then 异步获取结果。 如果条件不满足就不执行后面其他情况(情况 B 和情况 C )的代码了。 可是由于情况 A 是异步的,所以不管怎么样情况 B 和 C 都会执行,我不需要这一种情况,需要怎么处理呢?
1
BearD01001 2020-06-15 10:04:40 +08:00 via iPhone 1
不用 async 的情况下可以在 then 中 throw 一个 error 然后用 catch 实现
|
2
FEDT 2020-06-15 10:05:36 +08:00 1
把 情况 B 和情况 C 放到 then 的回调函数里不就可以了么...
|
3
miv OP @BearD01001 好的,太感谢了,我尝试下。
|
5
otakustay 2020-06-15 10:29:40 +08:00 1
如果 if 里的条件是 A 接口返回才知道的,那么除了把 B 和 C 放进 A 的 then 里以外没有任何办法
代码改造成 await 的话改起来没什么成本,反正外部调用肯定是认定返回值是 Promise 吧 |
6
Exin 2020-06-15 10:35:53 +08:00 via iPhone 1
1. 推荐 async/await
```js if (A) { const res = await requestA(...) if (xxx) return } if (B) ... else if (C) ... ``` 2. Promise.resolve ```js Promise.resolve(A ? requestA(...).then(res => xxx ? true : false) : false) .then(escapedFromA => { if (!escapedFromA) { if (B) ... else if (C) ... } }) ``` |
7
Exin 2020-06-15 10:36:56 +08:00 via iPhone
v2 回复是不是不支持 markdown ?
|