Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阵列销毁时异步/等待_Javascript_Asynchronous_Async Await - Fatal编程技术网

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)]);