我该如何做出Promise.all等待每一个诺言?

时间:2019-10-25 05:21:12

标签: es6-promise

我有代码:

final _items = List.generate(20, (e) => e);

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(),
    body: SingleChildScrollView(
      child: Column(
        children: <Widget>[
          Text("A"),
          SizedBox(
            height: 100.0,
            child: ListView.builder(
                scrollDirection: Axis.horizontal,
                itemCount: _items.length,
                itemBuilder: (context, index) {
                  print('$index');
                  return SizedBox(
                    width: 150.0,
                    child: Center(child: Text('${_items[index]}')),
                  );
                }),
          ),
          Text("B"),
        ],
      ),
    ),
  );
}

const testPromise = (stepNumber) => { return new Promise((resolve, reject) => { setTimeout(() => { console.log('Done with step ' + stepNumber); resolve() }, 1000); }); } const testPromiseAll = () => { return Promise.all([ [1, 2, 3].map(number => { return testPromise(number); }) ]); } testPromiseAll().then(() => { console.log('Done with all!'); });内部的所有承诺都解决之后,消息“立即完成”应该出现……或者,我想。阅读规范以及本文:

https://dev.to/dance2die/promise-race-vs-promise-any-and-promise-all-vs-promise-allsettled-26if

似乎应该是这样,但这没有发生。

我希望.all来解决内部的所有承诺是否都得到解决,同样,如果内部的任何承诺都被拒绝,整个链条应该会失败。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

您需要更改:

const testPromiseAll = () => {
  return Promise.all([
    [1, 2, 3].map(number => {
      return testPromise(number);
    })
  ]);
}

收件人:

const testPromiseAll = () => {
    return Promise.all(
        [1, 2, 3].map(number => {
            return testPromise(number);
        })
    );
}

您的代码将列表列表传递给Promise.all函数,该函数立即解析。