0

我正在使用 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")
      })
  }

非常感谢!

4

1 回答 1

0

有人评论说:您当前正在将数据保存到数据库之前进行重定向。为防止这种情况发生,您必须等到数据保存后,您可以使用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);
  }
于 2020-12-31T16:11:19.310 回答