ReactNative:Await / Async函数在继续之前等待结果

时间:2020-09-10 13:44:00

标签: javascript reactjs react-native

我正在尝试解决此问题,我有一个函数可以调用其他两个函数,该函数会将元素推入数组。我的问题是,以这种方式,第一个函数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写入数据库。

2 个答案:

答案 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);
});

Checkout MDN link