IBM Cloud Function не производит вывод - PullRequest
0 голосов
/ 19 февраля 2019

У меня проблемы с запуском этой IBM Cloud Function:

    /**
  *
  * main() will be run when you invoke this action
  *
  * @param Cloud Functions actions accept a single parameter, which must be a JSON object.
  *
  * @return The output of this action, which must be a JSON object.
  *
  */

function main(params) {

    const https = require('https');

https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
  let data = '';

  // A chunk of data has been recieved.
  resp.on('data', (chunk) => {
    data += chunk;
  });

  // The whole response has been received. Print out the result.
  resp.on('end', () => {
    console.log(JSON.parse(data).explanation);
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});

}

Моя проблема в том, что первые вызовы этой функции (по крайней мере, первые 3-4) не выдают результатов.Последующие вызовы выполняются правильно, и журнал отображается правильно.Как я могу исправить это непредсказуемое поведение?Я хотел бы, конечно, получить мои данные при первом вызове этой функции.Спасибо.

1 Ответ

0 голосов
/ 19 февраля 2019

Node.js использует неблокирующую модель асинхронного программирования.Эта функция main возвращается до того, как ответ HTTP станет доступен.

Возврат Обещания позволит вам ждать ответа HTTP.

function main(params) {
  return new Promise((resolve, reject) => {
    const https = require('https');

    https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
      let data = '';

      // A chunk of data has been recieved.
      resp.on('data', (chunk) => {
        data += chunk;
      });

      // The whole response has been received. Print out the result.
      resp.on('end', () => {
        const explanation = JSON.parse(data).explanation
        console.log(explanation);

        resolve({ explanation })
      });

    }).on("error", (err) => {
      console.log("Error: " + err.message);
      reject({ error: err.message })
    });

  })
}
...