【问题标题】:Correct implementation promises with Node using es6使用 es6 正确实现 Node 的承诺
【发布时间】:2016-06-10 17:43:43
【问题描述】:

我从 Node 开始,我不知道如何在这个例子中实现 Promise

  • 读取数组口袋妖怪
  • 使用api pokemon请求数据
  • 在新文件中写入响应

节点v6.1.0

ES6

我有这个代码

const fs = require('fs')
const request = require('request')
const arrPokemon = new Array('charmander','nidorino')

function writeResponse(name, content) {
    return new Promise(function (resolve, reject) {
         fs.writeFile(name, content, function (err, res) {
             if (err) return reject(err)
             return resolve(res)
         })
    })
}

pokemon = (name) => {
    return new Promise(function (resolve, reject) {
        request('http://pokeapi.co/api/v2/pokemon/'+name, function (err, res, body) {
            if (err) return reject(err)
            console.log(body)
            return resolve(body)
        })
    })
}

function readPokemon() {
    for(var i= 0; i < arrPokemon.length; i++) {
        console.log(arrPokemon[i])
        pokemon(arrPokemon[i])
        .then(responses => writeResponse('pokemon-' + i, responses))
        .catch(err => console.log(err))
    }
}

readPokemon()

我理解promises 的概念,但我很难在这个例子中实现承诺。

错误:

创建一个文件pokemon-2,但我需要为每个响应创建一个文件

【问题讨论】:

  • 使用您提供的代码,您的 Promise 已正确实现,所以我不确定问题出在哪里?
  • 是的,但我的执行不能正常工作'readPokemon'@peteb
  • 为什么要删除错误信息?
  • “创建一个文件pokemon-2 但我需要为每个响应创建一个文件” 错误消息吗?这听起来不像一个,但在问题中明确标记为这样。

标签: node.js ecmascript-6 es6-promise


【解决方案1】:

该错误是由与for循环配对的异步执行引起的。当执行到调用writeResponse 的部分时,循环变量i 已递增到2,因此所有writeResponse 调用实际上都将arrPokemon[2] 作为其第一个参数。

为了快速修复,您可以尝试以下方法:

for(let i= 0; i < arrPokemon.length;i++){
  console.log(arrPokemon[i])
  pokemon(arrPokemon[i]).then(responses => writeResponse(arrPokemon[i],responses)).catch(err => console.log(err))
}

【讨论】:

  • 是的,但是,创建一个文件pokemon-2 但我需要为每个响应创建一个文件
  • 这就是它的作用。我使用此更改运行了代码,结果如您所愿。
  • 感谢@FelixKling,已更新。还不熟悉 ES6 的所有特性。
【解决方案2】:

(代表 OP 发布答案)

  • 更改function pokemon(){} --> pokemon()=&gt;{}

  • 更改 var for(var i ...) --> for(let i)

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2016-11-20
    • 2018-11-28
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多