从另一个承诺中返回承诺

时间:2019-08-08 04:03:58

标签: javascript node.js promise

表面上看起来像是this one的副本,但事实并非如此。

在下面的代码段中,我试图从myData函数外部输出getData()

var myData, obj;

function getData() {
    return new Promise(function (resolve, reject) {
        fs.readFile('./json/data.json', 'utf8', function (err, data) {
            if (err) {
                console.log("Error in reading data.json file");
                return Promise.reject(err);
            }

            try{
                obj = JSON.parse(data);
            }
            catch(error) {
                console.log('Error in parsing the data.json file');
                return Promise.reject(error);
            }
            obj.forEach(element => {
                const options = {
                    resolveWithFullResponse: true
                }
                if (element.title == Image) {

                    rp.get(element.image, options)
                    .then( function (response) {

                        if(response.statusCode == 200) {
                            myData = Buffer.from(response.body).toString('base64');
                            myData.replace("myData:image/png;base64,", "");
                            console.log(myData);
                            console.log('+++++++++++++++++++++++++++++++++');

                            return Promise.resolve(myData);
                        }
                    })
                    .catch( function(error) {
                        console.log('Error in downloading the image via request()');
                        return Promise.reject(error);
                    })
                }
            })
        });
    })
}

getData()
    .then(function (myData) {
        console.log(myData);
        console.log('-----------------------------------------------------');
    })
    .catch(function (err) {
        console.log(err);
        console.log('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
    });

我能够打印myData(在++++++声明上方);但不是来自下面then()的{​​{1}}内部。为什么这样?如何通过通过getData()的{​​{1}}打印的myData返回return Promise.resolve(myData);?我相信这是一个一路过关,在诺言中的诺言的情况。

感谢您的帮助!

0 个答案:

没有答案