我想在firebase快照之外获取变量hours / minutes / secondes
,这样我就可以在promise中返回错误消息!我怎样才能做到这一点?当我离开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; });
},
}),
};
您的问题帖子中没有太多关于您尝试使用await
-ed"snapshot"命名参数变量箭头函数中定义的变量的上下文的信息,但这可能对您没有帮助,所以我会尝试。
此外,免责声明:我将在没有太多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上下文。
希望能有所帮助!