Модуль Asyn c, возвращающий обещание [обещание объекта] - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь экспортировать значение с помощью инструментальной переменной. однако данные возвращаются как [обещание объекта], а не как объект. Как я могу присвоить переменной модуля конечный результат, а не объект обещания.


var instruments = { 
    data: async () => {
        return new Promise((resolve, reject) => { 
            /// Respond after retrieving the data 
            resolve({result : "...." }
        );
    }
}

var symbols =   async () => {
    const res = await instruments.data();
    return res;
}

module.exports.instrument  =  symbols().then((data) => {
    console.log('data');
    return data; 
}).catch((e) => {
   console.log('error');
   return {}
}); 

Ответы [ 3 ]

1 голос
/ 26 мая 2020

Похоже, вам нужен кеш singleton . Вот базовая c реализация

cache.js

let data = {}

module.exports = {
  getData: () => {
    return data
  },
  setData: newData => {
    data = newData
    return
  },
}

Здесь нет необходимости в asyn c. Я бы разделил этот код с кодом, который извлекает данные.

fetchData.js

const cache = require('./cache')

const fetchData = () => {} // fetch data code here

fetchData().then(data => {
  cache.setData(data)
})
0 голосов
/ 26 мая 2020

Если была вызвана ваша асинхронная c функция instruments.data(), она await вернет Promise. просто добавьте await к return для ожидаемого результата.

var instruments = { 
    data: async () => {
        return await new Promise((resolve, reject) => { 
             // Respond after retrieving the data 
             resolve({result : "...." }); 
        }
}

или удалите async. это то же самое, что и выше.

var instruments = { 
    data: () => {
        return new Promise((resolve, reject) => { 
             // Respond after retrieving the data 
             resolve({result : "...." }); 
        }
}
0 голосов
/ 26 мая 2020

попробуйте это

var instruments = { 
data:  () => {
    return new Promise((resolve, reject) => { 
        /// Respond after retrieving the data 
             resolve({result : "...." }); 

}
}

var symbols =   async () => {
    const res = await instruments.data();
    return res;
}

module.exports.instrument  =  symbols;

затем импортируйте метод прибора для вызова, а затем вызовите

const instrument  = require("./filepath");

instrument().then((data) => {
    console.log('data');

    }).catch((e) => {
   console.log(e);
   }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...