【问题标题】:Javascript Then() Promise is not working AsynchronouslyJavascript Then() Promise 不能异步工作
【发布时间】:2021-04-18 00:25:32
【问题描述】:

我正试图弄清楚如何异步制作这个 Firestore 集合。我目前将它放在递归函数中,因为 for 循环也不起作用。我认为通过使用递归函数,它可以让我更好地控制何时想要重新启动该函数,但它仍然无法正常工作。请帮忙。我知道这对大多数人来说很容易解决。

const fakeIt = async () => {
    console.log("A");
    
    var itemsCreated = 1;
    items(0, itemsCreated);
    
    async function items(num, itemsCreated){
        if(num < itemsCreated){
            console.log("B");
            
            await db.collection('items').add({
                          active: true
            }).then(async (item) => {
                console.log("C");
                items(num + 1, itemsCreated)
            });
        }else{
            console.log("Done");
        }
    }
}
Array(2).fill(0).forEach(fakeIt);

我得到的打印输出如下:

A
B
A
B
C
Done
C
Done

我需要以下结果:

A
B
C
A
B
C
Done

【问题讨论】:

  • 你应该是awaiting fakeIt吗?
  • 您在aysnc function items(... 中有错字,应该是async 而不是aysnc。另外,如果你也在使用await,为什么还要使用then
  • 你也没有向fakeIt传递任何东西,Array.fill()位只是为了运行它两次?
  • 不应同时使用 await 和 then :)
  • @Noah - 我想我需要等待 fakeIt。这可能是问题所在。

标签: javascript google-cloud-firestore async-await


【解决方案1】:

我通过对 fakeIt 循环使用递归函数来解决这个问题。我摆脱了所有的异步等待,一切都很完美。感谢制作上述 cmets 的人。

function fakeIt(number, count) {

     if (number < count) {

          console.log("A");
    
          var itemsCreated = 1;
          items(0, itemsCreated);
    
          function items(num, itemsCreated){

               if(num < itemsCreated){
                    console.log("B");
            
                   db.collection('items').add({
                          active: true
                    }).then(async (item) => {
                         console.log("C");
                         items(num + 1, itemsCreated)
                    });
               }else{

                    fakeIt(number+1, count)
               }
       }else{

            console.log("Done");
       }
}
fakeIt(0, 2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2017-12-28
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多