我有代码:
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
来解决内部的所有承诺是否都得到解决,同样,如果内部的任何承诺都被拒绝,整个链条应该会失败。
我该怎么办?
答案 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
函数,该函数立即解析。