首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步模块返回promise [对象Promise]

异步模块返回promise [对象Promise]
EN

Stack Overflow用户
提问于 2020-05-26 12:55:28
回答 3查看 77关注 0票数 0

我正在尝试使用instrument variable导出该值。然而,数据以对象承诺的形式返回,而不是对象。如何使用最终结果而不是promise对象来赋值模块变量。

代码语言:javascript
复制
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 {}
}); 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-26 13:57:12

看起来你想要一个singleton缓存。下面是一个基本的实现

cache.js

代码语言:javascript
复制
let data = {}

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

这里不需要异步。我会将这段代码与检索数据的代码分开。

fetchData.js

代码语言:javascript
复制
const cache = require('./cache')

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

fetchData().then(data => {
  cache.setData(data)
})
票数 1
EN

Stack Overflow用户

发布于 2020-05-26 13:05:19

尝尝这个

代码语言:javascript
复制
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;

然后导入instrument方法进行调用,然后调用

代码语言:javascript
复制
const instrument  = require("./filepath");

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

    }).catch((e) => {
   console.log(e);
   }); 
票数 0
EN

Stack Overflow用户

发布于 2020-05-26 13:06:51

如果你的异步函数instruments.data()被调用,它将await返回Promise。只需在return中添加await即可获得预期结果。

代码语言:javascript
复制
var instruments = { 
    data: async () => {
        return await new Promise((resolve, reject) => { 
             // Respond after retrieving the data 
             resolve({result : "...." }); 
        }
}

或者删除async。和上面的一样。

代码语言:javascript
复制
var instruments = { 
    data: () => {
        return new Promise((resolve, reject) => { 
             // Respond after retrieving the data 
             resolve({result : "...." }); 
        }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62014925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档