我正在尝试解决此问题,我有一个函数可以调用其他两个函数,该函数会将元素推入数组。我的问题是,以这种方式,第一个函数function1
完成计算后,将返回其值并继续执行代码。第二个函数完成后,它将立即返回其值,并再次执行其余代码。
我想做的是,第一个函数function1(..)
在结束时被调用,第二个函数function2(..)
被调用,当两个数组都写满时,代码继续执行。我该怎么办?
非常感谢
async initialFunction(){
( async () => {
await function1(arrayPopulated1);
await function2(arrayPopulated2);
}) ();
// Code that use: newArray1 and newArray2 to write in the DB
}
async function1(array1){
for(let i = 0; i < array1.length; i++){
//operation there
// value = somedata
newArray1.push(value)
}
}
async function1(array2){
for(let i = 0; i < array2.length; i++){
//operation there
// value = somedata
newArray2.push(value)
}
}
编辑:
问题是function1
完成后,其值返回InitialFunction
,继续执行此函数的代码并写入db中。然后将function2
的值返回到InitialFunction
,继续执行此函数的代码,然后再次写入DB。
我希望function1
通过写入newArray1
数组,function2
将值写入newArray2
数组以及两者都写完来完成它然后填充InitialFunction
写入数据库。
答案 0 :(得分:1)
您不必将承诺再次包装在另一个异步函数中
async initialFunction(){
const newArray1 = [];
const newArray2 = [];
await function1(arrayPopulated1);
await function2(arrayPopulated2);
// Save to db
}
async function1(array1){
for(let i = 0; i < array1.length; i++){
newArray1.push(value)
}
}
async function1(array2){
for(let i = 0; i < array2.length; i++){
newArray2.push(value)
}
}
答案 1 :(得分:1)
如果您希望两个诺言都完成后再继续,则可以将两个诺言都包装在Promise.all中。
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});