нужна некоторая обработка, чтобы облачная функция вернула обещание Но обещание вернуть до обработки - PullRequest
0 голосов
/ 01 июля 2019

У меня есть облачная функция, где я передаю массив чисел и сравниваю эти числа с коллекцией в пожарном депо.И если числа присутствуют, то возвращают массив с этими числами.Но перед сравнением этих чисел функция возвращает пустое значение в обещании.

Я пытался использовать async await, но последовательность выполнения осталась прежней.

// сортировать список контактов

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, а внутри getValues ​​ожидается результат query.get.так что, наконец, возврат будет отправлен только после завершения всего процесса.

1 Ответ

0 голосов
/ 01 июля 2019

Я думаю, это то, что вы ищете

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...