Javascript 阵列销毁时异步/等待
我希望Javascript 阵列销毁时异步/等待,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我希望Promise.all中的数据在我实际执行数组销毁之前得到解决: const函数=异步(一,二)=>{ 恒量,恒量等待承诺([ map(translate),//translate是异步的 二,地图(翻译),, ]) console.log(_-one,_-two) } const translate=async(data)=>getTranslation(data)//getTranslation是异步的,是一个API调用 现在,console.log给我的是Promise,而不是实际
Promise.all
中的数据在我实际执行数组销毁之前得到解决:
const函数=异步(一,二)=>{
恒量,恒量等待承诺([
map(translate),//translate是异步的
二,地图(翻译),,
])
console.log(_-one,_-two)
}
const translate=async(data)=>getTranslation(data)//getTranslation是异步的,是一个API调用
现在,
console.log
给我的是Promise
,而不是实际的数据Promise。所有的都需要一个Promise数组,而不是普通的数组。它应该是扁平数组,而不是嵌套数组
您可以做的是让2个Promise.all()
(如果您想将一个和两个)分开:
如果你真的想合并它们并使用数组销毁,那么你必须先将它们展平并合并
await Promise.all([...one.map(translate), ...two.map(translate)]);
但是,当您想要隔离数据时,这会导致一些问题,因为您不确定将返回多少个数组,除非您对每个结果都有某种类型的键。one.map(translate)
返回一个承诺数组。
您必须使用Promise.all
将其转换为Promise
one//Element[]
一.映射(翻译)//Promise[]
Promise.all(one.map(translate))//Promise
总之,您必须使用承诺。所有两次:
const函数=异步(一,二)=>{
恒量,恒量等待承诺([
Promise.all(one.map(translate)),//问题在于需要一个承诺数组。但是,您只给它一个包含两个数组的数组,每个数组都包含承诺。该方法不是递归的
您需要更改代码,以便只等待数组的内容:
const fn=async(一,二)=>{
常数[
等待承诺。全部(一张地图(翻译)),
等待承诺。全部(两个。地图(翻译))
];
console.log(_-one,_-two);
}
const translate=async(数据)=>getTranslation(数据);
//模拟API调用
函数getTranslation(数据){
返回Promise.resolve(`${data}-translated`);
}
fn([“a”,“b”],[“x”,“y”]);
为什么对一个已经返回允诺的函数使用wait
呢,第二行,你想用哪一行?我遵循了:期望的是Promise
s的一个可数,而不是数组(带Promise
s)translate
很简单,但是,你不会把结果放在Promise中。所有的-你把one的结果放在一起。map(translate)
是一个数组,而不是Promise。@Eldar这产生了一个完全不同的结果。有趣的想法。
await Promise.all([...one.map(translate), ...two.map(translate)]);