Когда я пытаюсь запустить вызов mongodb find в своем задании cron, он останавливает выполнение задачи cron и вообще не запускается - PullRequest
0 голосов
/ 29 мая 2020

Вот код, доступный для пользователей:

var CronJob = require('cron').CronJob;
const User = require('../models/User');
const Teams = require('../models/Teams');

const sgMail = require('@sendgrid/mail');
require('dotenv').config();
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const axios = require("axios");

// add this to packagejson to start cron job \"node helpers/cron.js\" "
var job = new CronJob('* * * * *', async function () {
  var promise = await axios.request({
    method: 'get',
    url: 'http://localhost:5000/api/hackathons/present',
    port: 80,
  });

  const items = promise.data;
  var result_of_hackathon_names = items.map(dict => {
    return dict.name;
  })
  console.log(result_of_hackathon_names);
  console.log("he");
  for (let i = 0; i < result_of_hackathon_names.length; ++i) {
    let ht_name = result_of_hackathon_names[i];
    console.log(ht_name);

    ans = await Teams.collection.find({ 'hackathon': ht_name });

      console.log("end");
  }

  // try {
  //   ans = await Teams.collection.find({ 'hackathon': ht });
  //   ans.forEach(doc => {
  //     console.log(doc.userId);
  //   });
  //   console.log("here", ans);
  // } catch (err) {
  //   console.error(err);
  // }



  // var NewAns = await ans.then(function (result) {
  //   return result;
  // })

  console.log("I'm in")


  try {
    await sgMail.send(msg);
    console.log("sent");
  } catch (error) {
    console.log(error);
  }


  console.log("Finished");
}, null, true, 'America/Los_Angeles');


job.start();

На изображении также есть консоль с приостановкой вывода после первой итерации l oop. При запуске задания cron функция asyn c останавливается при самом первом вызове базы данных. "Await" вызывает ошибку sh, но если я не добавляю await, я получаю отложенное обещание.

...