我很难理解使用Promise.resolve()和使用promise之间的区别。
解释似乎有点难以得到所以我有一个小例子:
例如,我有一个返回这样的承诺的方法:
requestPokemon() {
return new Promise((resolve, reject) => {
axios.get("https://pokeapi.co/api/v2/pokemon/1").then(value => {
resolve(value);
})
.catch(error => {
reject(error);
})
});
}
所以,现在我可以调用这个方法并将承诺链接起来,我想出了两种方法,当Promise.resolve更好或没有时,它无法得到它,我的问题是理解它。
所以我用两种方式解决了这个问题:
首先:
Promise.resolve(this.requestPokemon()).then(value => {
this.pokemon = value.data.name;
}).catch(error => {
console.log(error);
})
第二
this.requestPokemon().then(value => {
this.pokemon = value.data.name;
}).catch(error => {
console.log(error);
})
请我稍微解释一下上下方面的缺点和好处,我非常感谢你的帮助。
谢谢
答案 0 :(得分:3)
首先,您不需要在requestPromise
中构建一个承诺(即antipattern},只需从axios中返回一个:
requestPokemon() {
return axios.get("https://pokeapi.co/api/v2/pokemon/1");
}
现在让我们来看看这一行:
Promise.resolve(this.requestPokemon()).then(/*...*/)
它将创建一个新的promise,当axios promise解析或拒绝时解析或拒绝,并为其添加一个then处理程序。所以它会像这样链接:
resolve() -> Promise (axios) -> Promise (Promise.resolve) -> then
reject() -> Promise (axios) -> Promise (Promise.resolve) -> catch
因为你可以看到Promise.resolve
只是传递数据,所以实际上它是超级的。我们实际上只需要:
resolve() -> Promise (axios) -> then
reject() -> Promise (axios) -> catch
可以通过以下方式完成:
this.requestPokemon().then(/*...*/, /*...*/);
请我稍微解释一下它在另一个上面的方面做出的缺点和好处
添加Promise.resolve
只是打字更多,使其可读性降低,没有语法差异。