gpt4 book ai didi

javascript - 我可以在另一个已解决的 promise 中解决一个 promise 吗?

转载 作者:行者123 更新时间:2023-11-30 19:31:38 24 4
gpt4 key购买 nike

我正在编写一种方法来遍历一系列项目,以查找下一个未完成的或最后一个返回 promise 的项目。

项目状态由另一种方法获取,该方法也返回一个 promise ,我试图在此方法的解析回调中解决/拒绝。

下面是我尝试的简化版本:

export const findNextEntry = (i) => {
let length = entries.length
let entry = entries[i]
entry.isLastEntry = i + 1 >= length

return new Promise((resolve, reject) => {
getEntryStatus(i).then(() => {
if (entry.status.complete) {
if ((i + 1) < length) {
findNextEntry(i + 1)
} else {
reject('no more entries')
}
} else {
resolve('entry set')
}
})
})

然后我调用方法:

findNextEntry(entry.number).then((resolve) => {
console.log(resolve)
}, (reject) => {
console.log(reject)
})

resolve/reject 回调似乎没有触发,我收到错误消息 Uncaught (in promise) no more entries

最佳答案

可能您必须为嵌套迭代调用 reject/resolve

export const findNextEntry = (i) => {
let length = entries.length
let entry = entries[i]
entry.isLastEntry = i + 1 >= length

return new Promise((resolve, reject) => {
getEntryStatus(i).then(() => {
if (entry.status.complete) {
if ((i + 1) < length) {
findNextEntry(i + 1).then(resolve).catch(reject)
} else {
reject('no more entries')
}
} else {
resolve('entry set')
}
})
})

类似但更简单的代码

function test(i = 0) {
console.log(i);
return new Promise((resolve, reject) => {
if (i < 10) test(i + 1).then(resolve).catch(reject);
else resolve('done');
});
}


test();

关于javascript - 我可以在另一个已解决的 promise 中解决一个 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56373680/

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