【发布时间】:2020-08-24 06:59:19
【问题描述】:
我想从后端获取几个数据,并在加载时处理它们。现在,当这段代码运行时,data1 和 data2 是未定义的。我想等他们,但我不知道如何保持我的代码干净。我不确定 Promise.all() 是否适合这里,因为我需要专门保存 data1 和 data2 的值,而且我无法编写通用代码来解析 Promise.all()。
return new Promise( (resolve,reject) => {
let data1;
let data2;
let url1 = "http://fakeapi.com/getData1";
fetch(url1)
.then(res => res.json())
.then(data => data1SpecificAction())
.then(data => data1 = data)
.catch("cannot fetch data1")
let url2 = "http://fakeapi.com/getData2";
fetch(url2)
.then(res => res.json())
.then(data => data2 = data)
.catch("cannot fetch data2")
if(data1 && data2) {
resolve()
}
else {
reject()
}
}
我该如何解决这个问题?
【问题讨论】:
-
除了其他问题,你从来没有给
data2分配任何东西……是错字吗? -
对于初学者来说,任何时候你从
.then()处理程序中为更高范围的变量赋值,你可能做错了什么。您将无法在需要时使用该更高范围的变量,因为仅在.then()处理程序内,因此您实际上知道它的值何时有效。 -
另外,我们可以更好地使用真实代码,而不是伪代码。
-
链接你的两个承诺或使用
Promise.all()或使用await。这是你的三个选择。并且,摆脱您创建的new Promise()。当您已经从fetch()获得异步操作的承诺时,就不需要这样做了。你正在做的事情包含几个反模式。
标签: promise node-fetch