Promise(axios)的问题请教

2020-06-15 09:57:36 +08:00
 miv

如题,遇到一个棘手的问题,基础不扎实的我来请教一下。

是这样的需要实现一个功能伪代码如下

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 都会执行,我不需要这一种情况,需要怎么处理呢?

1325 次点击
所在节点    问与答
10 条回复
BearD01001
2020-06-15 10:04:40 +08:00
不用 async 的情况下可以在 then 中 throw 一个 error 然后用 catch 实现
FEDT
2020-06-15 10:05:36 +08:00
把 情况 B 和情况 C 放到 then 的回调函数里不就可以了么...
miv
2020-06-15 10:08:04 +08:00
@BearD01001 好的,太感谢了,我尝试下。
miv
2020-06-15 10:10:35 +08:00
@FEDT 是这样的,改动成本有点大,因为满足情况 A 才执行对应的代码。这样的话就会多一份代码在回调函数里面了,有点冗余
otakustay
2020-06-15 10:29:40 +08:00
如果 if 里的条件是 A 接口返回才知道的,那么除了把 B 和 C 放进 A 的 then 里以外没有任何办法
代码改造成 await 的话改起来没什么成本,反正外部调用肯定是认定返回值是 Promise 吧
Exin
2020-06-15 10:35:53 +08:00
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) ...
}
})
```
Exin
2020-06-15 10:36:56 +08:00
v2 回复是不是不支持 markdown ?
miv
2020-06-15 10:45:42 +08:00
@otakustay 多谢老哥

@Exin 多谢老哥
我尝试下
godgc
2020-06-15 12:33:03 +08:00
@Exin v2 应该是要```javascript 吧

e.g

```javascript
let foo = 'bar';
```
godgc
2020-06-15 12:33:25 +08:00
@Exin 惨..也不行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/681579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX