我想问一个关于我使用 Promises 的方式的问题,因为我不确定我是否遇到了过于复杂的事情。
首先,我试图创建一些我想一个接一个执行的方法,因为它们依赖于之前每个方法的结果。
我的项目结构是这样的
my_project
csv
helpers
FileDownload.js
scripts
getCSVData.js
app.js
现在每个文件看起来像
## FileDownload.js
const fetch = require('node-fetch');
const fs = require('fs');
module.exports = function(url, target) {
return fetch(url)
.then(function(res) {
return new Promise((resolve, reject) => {
var dest = fs.createWriteStream(target);
res.body.pipe(dest)
.on('finish', () => resolve()) // ** Resolve on success
.on('error', reject); // ** Reject on error
});
}).then(result => {
console.log(`File saved at ${target}`)
return result;
});
}
## getCSVData.js
const file_download = require('../helpers/FileDownload')
function getPremierLeagueData() {
file_download("http://www.football-data.co.uk/mmz4281/1718/E0.csv", "./csv/premier_league/premier_league.csv")
}
module.exports = {
getPremierLeagueData: getPremierLeagueData
}
## app.js
const premier_league = require('./scripts/getCSVData')
premier_league.getPremierLeagueData()
.then(function(result){ console.log(result)})
运行 node app.js
时出现错误 TypeError: Cannot read property 'then' of undefined
如果我回到我的 FileDownload
函数和未定义的 console.log(result)
。
我在这里的困惑是,因为调用了 resolve()
我认为 Promise 已解决?所以这应该延续到 .then
。
我显然误解了这里的内容。
最佳答案
您的 getPremierLeagueData
函数不返回 Promise。它不返回任何东西......
你只需要返回file_download
的结果,这已经是一个Promise:
function getPremierLeagueData() {
return file_download(args)
}
关于javascript - 处理 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47350993/