gpt4 book ai didi

javascript - 循环直到 Promise 函数给出结果

转载 作者:行者123 更新时间:2023-12-03 03:34:53 29 4
gpt4 key购买 nike

我正在寻找循环 Promise 函数,直到得到我想要的结果。

到目前为止,我正在使用这样的递归:

function pull() {
dataFactory.pullFunction().then(function(res) {
pull()
})
}

但这给我的加载栏带来了一些前端/样式错误。

我会做这样的事情:

function pull() {
while (res.status == 'ONGOING') {
dataFactory.pullFunction().then(function(res) {
// my stuffs
})
}
}

但是当我尝试时,pullFunction() 永远不会被调用。

最佳答案

如果您无法使用async/await,那么您必须使用一个调用自身的函数。这并不是真正的递归,因为调用堆栈不像通常的(同步)递归那样构建。

但是,你需要始终遵守 promise 。因此,返回 promise ,并继续使用then,也在代码的其余部分中首次调用pull时也是如此。

您可能还希望将从拉取中获得的数据 block 收集到一个数据集中。

我在这里假设响应对象将具有包含数据 block 的数据属性。

这是如何工作的(使用pullFunction的虚拟实现):

function pull() {
return (function loop(data) {
return dataFactory.pullFunction().then ( res => {
return res.status === 'ONGOING'
? loop(data.concat(res.data))
: data.concat(res.data)
});
})([]);
}

// Mock implementation
var dataFactory = {
pullFunction: function () {
console.log('pull');
return new Promise( resolve => {
setTimeout(_ =>
resolve({
status: Math.random() > 0.7 ? 'DONE' : 'ONGOING',
data: [1,2,3,4]
}),
500)
});
}
}

// test it
pull().then( (data) => {
console.log('data: ', data);
});
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 循环直到 Promise 函数给出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45915905/

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