Firebase快照反应承诺如何将变量获取到外部?

时间:2019-10-31 12:52:29

标签: reactjs firebase

我想在我的Firebase快照之外获取变量hours / minutes / secondes,以便我可以在诺言中返回错误消息!我该如何实现?当我离开firebase函数之外时,我的变量hours是否未定义? ''''''''''''''''''''''''''''''''''''''''''''''''

 addQuestion(formData) {
    //  console.log('addquestion')
      const {
        theQuestion,
      } = formData;

      return new Promise(async (resolve, reject) => {

        // Are they a user?
        const UID = await Firebase.auth().currentUser.uid;
        if (!UID) return reject({ message: errorMessages.memberNotAuthd });


        await FirebaseRef.child('questions').orderByChild('author').equalTo(UID).limitToLast(1)
        .once("value").then(snapshot => {

          snapshot.forEach(function (childSnapshot) {

            var value = childSnapshot.val();
            const LastQuestionTime =  value.timestamp



            var dateFuture = new Date(LastQuestionTime);
            var dateNow = new Date();

            var seconds = Math.floor((dateNow - (dateFuture))/1000);
            var minutes = Math.floor(seconds/60);
            var hours = Math.floor(minutes/60);
            var days = Math.floor(hours/24);

            hours = hours-(days*24);
            minutes = minutes-(days*24*60)-(hours*60);
            seconds = seconds-(days*24*60*60)-(hours*60*60)-(minutes*60);

        })

        if (hours <= 0) return reject({ message: 'error '+60-minutes+' minutes'});
      });



        // Validation rules
        if (!theQuestion) return reject({ message: 'Veuillez écrire une question' });


        var userInfo = {
          question : theQuestion,
          author : UID,
          timestamp: Firebase.database.ServerValue.TIMESTAMP,

         }; //use
        // Go to Firebase
        return Firebase.database().ref('questions').push(userInfo)
          .then(async () => {


          //  this.replaceRecipes(data);
            return resolve();
          }).catch(reject);
      }).catch((err) => { throw err.message; });
    },


  }),
};

1 个答案:

答案 0 :(得分:0)

关于您尝试使用await-ed版“快照”命名参数变量arrow函数中定义的变量的上下文,您的问题中没有很多信息,但是可能没有必要为您提供帮助,所以我会尽力的。

此外,免责声明:我将在没有太多对reactjs的知识的情况下进行回答,仅提供一些当代JavaScript。另外,我没有在下面测试代码片段,它们只是建议,而不是真实的代码。此外,我没有对您的代码的异步调用结构进行太多分析,因此我可能还不了解,但我认为您可以任一

将所需的变量附加到适当范围的对象变量上,例如:

var externalvariable = { prop_one: 'with data' };

function returnsPromise(paramOne) {
    return new Promise(async (resolve, reject) => {
        await awaitFuncCall(paramData).then(snapshotdata => {
            var dateNow = new Date();
            //attach data to external scoped object variable
            externalvariable.date = dateNow;
            //then continue on with async
            //maybe resolve(externalvariable);
            resolve();
        });
    }
}
//use data then here like
usefulFuncWorkCall(externalvariable, externalvariable.date);
//or ((pseudocode(!!)))
let duration = (new Date()) - externalvariable.date;

或者,(考虑到我对代码的了解,这不太可能),您可以将要使用的数据附加到要返回的变量中;也许是您发布的代码中的“ userInfo”变量,例如userInfo.questionDateData = datedatavariable;

最后重申免责声明:可以采用更好的实际或更“ ReactJS”或代码库约定方式来完成您要尝试的工作,我的建议仅涉及已发布代码的JavaScript上下文。 >

希望有帮助!