【问题标题】:how to build an array with promise?如何构建一个有承诺的数组?
【发布时间】:2020-05-12 06:42:38
【问题描述】:

我正在尝试循环并构建一个数组...从“0”开始并在“10”下结束...我现在得到的只是每个循环的数组大小为 1,即使我是递增。

(function loop( ii) {
    if (ii < 10) new Promise((resolve, reject) => {
        setTimeout( () => {
            arry.push(ii);
            console.log(ii+" "+arry+' '+arry.length);
            resolve();
        }, Math.random() * 1000);
    }).then(loop.bind(arry = [], ii+1));
})(0);

【问题讨论】:

  • 你想用这段代码做什么?
  • 回答您的问题:arry = [] 在每次迭代时覆盖全局变量。
  • arry = [] 覆盖全局变量...我明白了,这对我来说是一个关于在哪里声明它的问题。

标签: javascript promise


【解决方案1】:

看起来arry = [] 是这里的罪魁祸首——每个循环都将它重置为一个空数组,所以当你推送它时,它的长度只有一。您可能需要在循环之外定义变量,如下所示:

var arry = [];

(function loop( ii) {
    if (ii < 10) new Promise((resolve, reject) => {
        setTimeout( () => {
            arry.push(ii);
            console.log(ii+" "+arry+' '+arry.length);
            resolve();
        }, Math.random() * 1000);
    }).then(loop.bind(arry, ii+1));
})(0);

【讨论】:

  • 那么将数组绑定到函数的上下文是什么意思?
  • @JonasWilms 是的,我最初只专注于解决所述问题,但我同意如果您不在任何地方使用 this 关键字对阵列执行操作,loop.bind 不会很有意义。我猜他希望能够在不需要定义新函数的情况下将回调传递给.then,但最佳实践肯定是.then(()=&gt;loop(ii+1))
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
相关资源
最近更新 更多