Javascript Promise 将值推入数组(仅来自函数还是外部?)

3 javascript promise es6-promise

我有一些承诺和 Promise.all:

array = [];


  var one = new Promise(function(resolve, reject) {
    // Do stuff
    setTimeout(function() {
      resolve('One Done');
      array.push('one');
    }, 5000);
  });


  var two = new Promise(function(resolve, reject) {
    // Do Stuff
    resolve('Two Done');
    array.push('two');
  });


  Promise.all(array).then(values => {
    console.log(values);
  });
Run Code Online (Sandbox Code Playgroud)

我们知道这不起作用,因为 array.push 需要在外面。

我目前有一些函数需要通过 Promise 调用,以便最终我可以在 Promise.all 中使用它。

是否建议像这样从 Promise 内部调用该函数:

    function dosomething() {
        // does something
        array.push('something');
    }

  var mypromise = new Promise(function(resolve, reject) {
    dosomething();
    resolve('Did something');
  });
Run Code Online (Sandbox Code Playgroud)

或者有没有更明智的方法来做到这一点?

Dav*_*yon 6

Promise.all等待Promises. 在您的示例中,您总是将string类型推入数组。这显然行不通。在您的第一个示例中,您希望自己推送承诺:

array = [];


  var one = new Promise(function(resolve, reject) {
    // Do stuff
    setTimeout(function() {
      resolve('One Done');
    }, 5000);
  });

  array.push(one);


  var two = new Promise(function(resolve, reject) {
    // Do Stuff
    resolve('Two Done');
  });

  array.push(two);

  Promise.all(array).then(values => {
    console.log(values);
  });
Run Code Online (Sandbox Code Playgroud)

只要数组包含Promise对象,Promise.all就会按预期工作。