表面上看起来像是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);
?我相信这是一个一路过关,在诺言中的诺言的情况。
感谢您的帮助!