javascript - 处理 promise

标签 javascript promise

我想问一个关于我使用 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/

相关文章:

javascript - 如何链接具有 namespace 的方法?

multithreading - Clojure - 构建直播服务器的方式 - 有 promise ,但它是正确的方式

javascript - 尝试模拟 Promise 时出现问题

node.js - Knex.js 多链式查询

javascript - 将 async/await 与 forEach 循环结合使用

javascript - 如何制作嵌入代码供其他人在他们的网站上分享?

javascript - intel xdk 将 mySQL 数据库连接到应用程序

javascript - 使用 Jquery 通过附加 <animate> 来更改 SVG 颜色,为什么它不起作用?

javascript - 当我添加 [(ngModel)] 时,Angular.JS 丢失 HTML 格式

javascript - Promise.all 中的链式 promise ,没有包装器 Promise