JavaScript Promise 怎么实现异步操作的结果转换
使用 .then() 方法返回新值或新 promise 即可实现结果转换。调用链中前一个 promise 的 resolve 值会作为参数传递给下一个 .then(),在该回调函数中对输入数据进行计算、映射或格式化后 return 新的结果,后续节点将自动接收这个新值。如果直接 return 原始数据,则原样传递;若 return 另一个 promise,则等待其完成后再传递最终值。

如何对单个异步结果进行同步处理与转换
在 .then() 回调函数内部执行同步逻辑即可完成转换。例如获取用户 ID 后将其转换为大写字符串,只需在回调中对该 ID 调用 toUpperCase() 并 return 结果。这种转换是串行的,下一个 .then() 接收到的就是转换后的字符串而非原始 ID。

const userId = 123;
new Promise(resolve => setTimeout(() => resolve(userId), 100))
.then(id => {
console.log('Original:', id); // 123
const upperId = String(id).toUpperCase();
return upperId;
})
.then(upperId => {
console.log('Converted:', upperId); // "123"
return upperId + '-USER';
})
.then(finalResult => {
console.log('Final:', finalResult); // "123-USER"
});
如何处理多个异步结果的组合转换
使用 Promise.all() 可以并行等待多个 Promise 完成,并将它们的结果收集到一个数组中进行统一转换。当所有输入 Promise 都 resolve 时,.then() 接收到的参数是一个包含所有结果的数组,此时可以对数组元素进行遍历、过滤或聚合操作。如果任一 Promise reject,整个 Promise.all() 将立即失败并进入 .catch() 分支。
立即学习“Java免费学习笔记(深入)”;

const promises = [
new Promise(resolve => setTimeout(() => resolve(10), 50)),
new Promise(resolve => setTimeout(() => resolve(20), 50)),
new Promise(resolve => setTimeout(() => resolve(30), 50))
];
Promise.all(promises)
.then(results => {
console.log('Raw results:', results); // [10, 20, 30]
const doubled = results.map(n => n * 2);
return doubled;
})
.then(doubledResults => {
console.log('Doubled:', doubledResults); // [20, 40, 60]
const sum = doubledResults.reduce((a, b) => a + b, 0);
console.log('Sum:', sum); // 120
});


















