从函数返回然后在promise.all()中使用?

时间:2016-07-08 19:16:46

标签: javascript json sqlite promise

我有三个函数,每个函数执行一个SQL查询并返回一个数据数组;我知道这部分是有效的,因为我可以在返回数组之前执行json.stringify并且它按预期工作。问题是我需要等到这三个函数完成后再用它们做更多的东西。

我使用的每个函数都有相同的调用结构:

this.foo.makeFullJSON().then((fooStorage) => {
    fooJSON = '{foo:[' + JSON.stringify(fooStorage) + ']}';
});

我知道我应该有一系列的promises,然后将promises推送到它然后使用Promise.all(),但我真的不知道我实际需要做什么代码的那部分代码上。

编辑:清理,我调用的每个makeFullJSON()都返回一个promise(数组)。我需要用结果数组做一些事情。

2 个答案:

答案 0 :(得分:2)

在创建变量时将承诺分配给变量,然后您可以将该变量传递到promise.all()

由于我看不到你的代码的完整实现,这里有一个工作的,精简版的如何使用promises,用一些类似的名字嘲笑。

function makeFullJSON(time) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, time, [time]); // send back an array for simulation
  })
}

var p1 = makeFullJSON(1000);
var p2 = makeFullJSON(500);
var p3 = makeFullJSON(750);

p1.then(array => {
  console.log('Promise 1 complete', array);
  // Do other stuff with the return value
});

p2.then(array => {
  console.log('Promise 2 complete', array);
});

p3.then(array => {
  console.log('Promise 3 complete', array);
});

Promise
  .all([p1, p2, p3])
  .then(arrayOfAllResolvedValues => {
    // This array will contain values; the values from the
    // resolved promises in order of adding them to the promises array
    console.log('Array of resolved values:', arrayOfAllResolvedValues);
  });

答案 1 :(得分:0)

Promise.all()需要一系列承诺作为参数。 你只需致电

Promise.all([
    this.foo.makeFullJSON1(),
    this.foo.makeFullJSON2(),
    ...]);

由于调用这些函数将返回promise对象。