gpt4 book ai didi

javascript - 如何构造嵌套的 Promise

转载 作者:行者123 更新时间:2023-11-30 07:55:42 26 4
gpt4 key购买 nike

我有一种情况,我认为对我来说唯一的选择是将一些 Promise 相互嵌套。我有一个需要执行的 Promise 和一个在 Promise 完成之前执行某些操作的方法。像这样:

let promise = new Promise((resolve, reject) => {

// Do some stuff

});

doSomethingUntilPromiseisDone(promise);

但是,在我的 Promise 中,我需要执行另一个返回另一个 Promise 的方法:

let promise = new Promise((resolve, reject) => {

fetchValue(url)
.then((value) => {

// Do something here

}).catch((err) => {
console.error(err);
});

});

doSomethingUntilPromiseisDone(promise);

但是现在,在 fetchValue 方法的 then 语句中,我有另一个方法需要执行,你猜怎么着,返回另一个 Promise:

let promise = new Promise((resolve, reject) => {

fetchValue(url)
.then((value) => {

saveToCache(value)
.then((success) => {

console.log('success!!');
resolve('success');

});

}).catch((err) => {
console.error(err);
});

});

doSomethingUntilPromiseisDone(promise);

所以最后,我有一个 promise , promise 中的 promise , promise 中的 promise 。有什么办法可以更好地构建它,使其更直接吗?将它们相互嵌套似乎与 Promise 的预期链接方法背道而驰。

最佳答案

使用.then()

let doStuff = (resolve, reject) => {/* resolve() or reject() */};
let promise = new Promise(doStuff);
doSomethingUntilPromiseisDone(
promise
.then(value => fetchValue(url))
.then(value => value.blob())
.then(saveToCache)
)
.then(success => console.log("success!!"))
.catch(err => console.error(err))

关于javascript - 如何构造嵌套的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com