我想在我的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; });
},
}),
};
答案 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上下文。 >
希望有帮助!