初学es6,调用receiveData方式,虽然能读取数据,但是返回的data依然是空

发布于 2022-09-07 20:39:59 字数 1051 浏览 28 评论 0

module.exports = {

    fetchData( dataUrl, start ) {
        return new Promise((resolve, reject) => {
            fetch(`${dataUrl}/data${(start+ 0 + '').padStart(2, '0')}.json`)
                .then((data) => {
                    resolve(data.json());
                }, (error) => {
                    reject(error);
                })
        });

    },

    async getData( dataUrl, start ) {

        const _self = this;
        let data = await _self.fetchData( dataUrl, start );
        return data;

    },
    
    receiveData( dataUrl, start ) {
        const _self = this;
        let data = {};

        _self.getData('virtual/result', 2).then(
            function(responseThenData) {
                data = responseThenData;
            })
            .then(function() {
                //console.log('abc')
            })
            .catch(function(e) {
                console.log("promise, error =", e);
            });
        
        return data;
    }


}

我希望返回的data 是读取到的数据,怎么修改啊?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

永不分离 2022-09-14 20:39:59
receiveData( dataUrl, start ) {
        const _self = this;

        _self.getData('virtual/result', 2)
            .catch(function(e) {
                console.log("promise, error =", e);
            });
        
        
    }
    


const data = await receiveData();
console.log(data);
淡墨 2022-09-14 20:39:59

你的getData是异步的,当你调用receiveData的时候,会直接返回空的Data出来,因为你的data赋值操作是在异步回调里面去做的,但是你的return却不是在回调里面。你应该把receiveData也弄成async,然后调用的时候用await

async receiveData( dataUrl, start ) {
        const _self = this;

        return _self.getData('virtual/result', 2)       
    }
    
let data = await receiveData() 
// 或者下面这样
receiveData.then(
            function(responseThenData) {
                //responseThenData;
            })
            .then(function() {
                //console.log('abc')
            })
            .catch(function(e) {
                console.log("promise, error =", e);
            });    

大概是这么改

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文