微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JS 保存数据 THEN 重定向

如何解决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 举报,一经查实,本站将立刻删除。