setTimeout () в Node.js - PullRequest
       39

setTimeout () в Node.js

0 голосов
/ 04 сентября 2018

Я пишу облачные функции на триггерах Cloud Firestore. То, что я хочу, - это когда документ добавляется в некоторый uuid, его нужно удалить через 2 минуты и назначить те же данные другому документу. Я написал код относительно этого, как показано ниже

exports.createdOpenOrder = functions.firestore.document('Some/{psId}/Open/{OrderId}').onCreate((snap, context) => {
    // Get an object representing the document
    console.log("Deleting function execution started:");

    const newValue = snap.data();
    var OrderId = context.params.OrderId;
    var psId = context.params.psId;

    setTimeout(delete_cur, 120000);

    function delete_cur() {

        var data = db.collection('Some').doc(psId).collection('Open').doc(OrderId).delete().then(function() {
            console.log("Document successfully deleted!");
            // calling another function to reassign
            reassign(OrderId);
            return;
        }).catch(function(error) {
            console.error("Error removing document: ", error);
            return;
        });

     }

});

Теперь моя проблема в том, что функция setTimeout не вызывается точно через 2 минуты, а данные не удаляются. Что-то не так с моим кодом? Пожалуйста, дайте мне знать, как правильно писать код на setTimeout.

1 Ответ

0 голосов
/ 04 сентября 2018

Чтобы найти проблему, поместите журнал раньше и изучите содержимое вашего обработчика setTimeout.

В настоящее время вы перехватываете исключения только после того, как асинхронная функция delete вернется. Все остальные исключения в цепочке перед вызовом delete не перехватываются.

function delete_cur() {
  console.log('handler called')
  try {
    var data = db.collection('Some').doc(psId).collection('Open').doc(OrderId).delete().then(function() {
      console.log("Document successfully deleted!");
      // calling another function to reassign
      reassign(OrderId);
      return;
    }).catch(function(error) {
      console.error("Error removing document: ", error);
      return;
    });
  } catch (e) {
    console.error('could not invoke delete', e)
  }

}
...