Вызов функции, содержащей обещание из другой функции - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь узнать, как использовать обещания в NodeJs, и я использую библиотеку AWS -SDK для доступа к объекту S3. Моя цель - вызвать функцию readFromS3() из функции init() и распечатать содержимое файла. Однако я не получаю желаемых результатов, как показано ниже первым оператором console.log внутри init(). Я понимаю, что обещание не выполнено, и я хотел получить ваши предложения о том, как я могу заблокировать выполнение, пока объект news НЕ станет НУЛЬ ?? *

These are the SPECS undefined
THIS IS THE END. This should only print after news have been read from S3
{... // JSON data from S3 printed out

1 Ответ

1 голос
/ 17 марта 2020

Вам нужно вернуть ваше обещание из метода read и дождаться этого вызова внутри функции init, чтобы вы могли получить вывод. как то так

const AWS = require('aws-sdk');

const S3 = new AWS.S3({});

const CONFIG = {
  async init() {
    const news = await CONFIG.readFromS3();
    console.log('These are the file contents ' + JSON.stringify(news));
    console.log('THIS IS THE END. This should only print after news have been read from S3');
  },

  readFromS3() {
    // set parameters for reading S3 files
    const options = {
      Bucket: 'my-bucket',
      Key: 'myFile.txt'
    };

    // create a promise to read from S3
    const readS3Promise = S3.getObject(options).promise();

    // start reading from s3
    return readS3Promise
      .then(function(data) {
        return JSON.parse(data.Body);

        });
      })
      .catch(function(error) {
        console.log('ERROR: Cannot read from S3');
        throw error;
      });
  }
};

CONFIG.init();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...