如何解决JS 保存数据 THEN 重定向
我正在使用 js 和 jsPsych 编写一个实验。
在任务结束时,我想将数据保存到 Firebase Firestore,然后重定向到某个位置。但是,当我包含 window.location.replace 时,目前没有数据被保存。 没有重定向就可以正常工作。但我两者都需要。任何建议将不胜感激。
jsPsych.init({
timeline: timeline,preload_images: [
on_finish: function() {(saveData(jsPsych.data.get().json()));
(window.location.replace("https://url.com"));
},});
function saveData(data){
console.log("trying to save");
const db = firebase.firestore();
var data = JSON.parse(data);
var namedData = {};
data.forEach(function(q) {
//console.log(q.internal_node_id)
if(q.hasOwnProperty("responses"))
{
q.responses = JSON.parse(q.responses);
}
namedData[q.internal_node_id] = q;
})
//db.collection("user").doc(subject_id).set(namedData)
db.collection("user").doc(subject_id).set(namedData)
.then(function() {
console.log("data saved")
})
}
非常感谢!
解决方法
有人评论说:您目前正在将数据保存到数据库之前进行重定向。为防止出现这种情况,您必须等到数据保存完毕,您可以使用当前用于记录的 then()
。
所以:
on_finish: function() {
saveData(jsPsych.data.get().json());
},});
function saveData(data){
console.log("trying to save");
const db = firebase.firestore();
var data = JSON.parse(data);
var namedData = {};
data.forEach(function(q) {
if(q.hasOwnProperty("responses")) {
q.responses = JSON.parse(q.responses);
}
namedData[q.internal_node_id] = q;
})
db.collection("user").doc(subject_id).set(namedData)
.then(function() {
console.log("data saved");
window.location.replace("https://url.com")
})
}
如果您愿意,可以从 saveData
返回承诺并在调用方中使用它:
on_finish: function() {
saveData(jsPsych.data.get().json()).then(function() {
window.location.replace("https://url.com");
});
},});
function saveData(data){
console.log("trying to save");
const db = firebase.firestore();
var data = JSON.parse(data);
var namedData = {};
data.forEach(function(q) {
if(q.hasOwnProperty("responses")) {
q.responses = JSON.parse(q.responses);
}
namedData[q.internal_node_id] = q;
})
return db.collection("user").doc(subject_id).set(namedData);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。