Передача вторичных данных в мою вторую функцию обратного вызова - PullRequest
1 голос
/ 01 октября 2019

Я хочу использовать переменную промежуточные данные в моем втором обратном вызове, но я не знаю, как передать его туда в моей текущей ситуации. Кто-нибудь знает, как это сделать?

   const unsubscribe = firebase
     .locations()
     .once('value')
     .then(async snapshot => {
       const promises = []
       const intermediateData = snapshot.val()

       snapshot.forEach(element => {
         promises.push(firebase.user(element.key).once('value'))
       })

       return Promise.all(promises)
     })
     .then(snapshots => {
       const userInformation = []

       snapshots.forEach(userSnapshot => {
         if (userSnapshot.exists()) {
           userInformation.push({
             userId: 1,
             name: userSnapshot.val().username
           })
         }
       })
     })

   return () => unsubscribe
 }, [firebase, setSnackbarState, userId]) ```

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Вы можете вернуть объект, содержащий результаты Promise.all и intermediateData

const unsubscribe = firebase
  .locations()
  .once('value')
  .then(async snapshot => {
      const promises = []
      const intermediateData = snapshot.val()

      snapshot.forEach(element => {
        promises.push(firebase.user(element.key).once('value'))
      })

      return Promise.all(promises).then(snapshots => ({snapshots, intermediateData})
                                                      // ^^ return object
      })
    .then(({snapshots, intermediateData}) => {
           // ^^^ destructure returned object
      const userInformation = []

      snapshots.forEach(userSnapshot => {
        if (userSnapshot.exists()) {
          userInformation.push({
            userId: 1,
            name: userSnapshot.val().username
          })
        }
      })
    })
1 голос
/ 01 октября 2019

Поместите его во внешнюю крышку:

let intermediateData;
const unsubscribe = firebase
 .locations()
 .once('value')
 .then(async snapshot => {
   const promises = []
   intermediateData = snapshot.val()

   snapshot.forEach(element => {
     promises.push(firebase.user(element.key).once('value'))
   })

   return Promise.all(promises)
 })
 .then(snapshots => {
   //
   // Now you can access intermediateData here
   //
   // ...
 })
...