在云功能返回承诺之前需要做一些处理。但是承诺是在处理之前返回

时间:2019-07-01 18:52:05

标签: android node.js firebase google-cloud-firestore google-cloud-functions

我有一个云函数,其中我传递一个数字数组并将这些数字与firestore中的集合进行比较。如果存在数字,则返回包含这些数字的数组。但是在比较这些数字之前,该函数在promise中返回空值。

我尝试使用异步等待,但执行顺序保持不变。

//排序联系人列表

export const  addMessage= functions.https.onCall(async (data:any, context) => {

     const col=admin.firestore().collection("joshua");

     var match:[]
    match=data.list  
      var perm1=new Array()
      res11.push("454675556")
     console.log("above resolve")

        for(let val in match){

        var inter=await Promise.all([getValues(col,val)])
        console.log("inside resolve"+inter)

           }

  perm1.push("23432")
  console.log("just before resolve")

  return new Promise((res,rej)=>{
      res(perm1)
  })

      });



//the async function which is suppose to process on every iteration

 function getValues(col1:any,val1:any)
       {
         return new Promise(async(res,rej)=>{ 
          var query= await col1.where('Listed','array-contains',val1)
              var value=await query.get()
                res(value)
            })
            .catch(err=>{
              console.log(err)
            })
       }
我希望序列是异步的,其中等待getValues的返回值,并等待query.get的getValues结果内部。 这样最后返回仅在所有过程完成后才发送。

1 个答案:

答案 0 :(得分:0)

我认为这就是您要寻找的

export const  addMessage= functions.https.onCall(async (data:any, context) => {

  const col = admin.firestore().collection("joshua");
  var match:[]
  match = data.list  
  var perm1 = []
  // res11.push("454675556") // ? undefined

  for(let val in match){
    var inter = await getValues(col,val)
    console.log("inside resolve" + inter)
  }

  perm1.push("23432") // ??
  // console.log("just before resolve")

  return Promise.resolve(perm1)

});



const getValues = async (col1:any, val1:any) => {
  const query = col1.where('Listed','array-contains', val1)
  var value = await query.get().then(getAllDocs)
  return value
}

const getAllDocs = function(data: any) {
  const temp: Array<any> = []
  data.forEach(function (doc: any) {
    temp.push(doc.data())
  })
  return temp
}