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

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 是读取到的数据,怎么修改啊?

阅读 2.7k
2 个回答
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);

你的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);
            });    

大概是这么改

推荐问题