2 javascript node.js promise es6-promise
我有一个错误TypeError: cars.map(...).then is not a function。我想在更新颜色时终止连接。
cars.map(function (item, i) {
if (item.color === 'red') {
updateColor(item.id)
}
}).then(() => connection.end())
Run Code Online (Sandbox Code Playgroud)
此答案仅适用于updateColor异步且确实返回Promise对象的情况。
.map返回一个数组,而不是一个Promise. 您可以做的是构建一个Promiseusing数组,.map然后使用所有解析它们Promise.all,然后处理结果。
下面的代码将执行 all updateColor,等待它们完成然后停止连接。
Promise.all(cars.map((item, i) => {
if (item.color === 'red') {
return updateColor(item.id);
}
return false;
}))
.then(() => connection.end())
Run Code Online (Sandbox Code Playgroud)
使用async/await代替Promises
await Promise.all(cars.map((item) => {
if (item.color === 'red') {
return updateColor(item.id);
}
return false;
}));
connection.end();
Run Code Online (Sandbox Code Playgroud)
使用reduce代替map
await Promise.all(cars.reduce((tmp, x) => (x.color === 'red' ? [
...tmp,
updateColor(x.id),
] : tmp), []));
connection.end();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4024 次 |
| 最近记录: |