我从Node开始,我不知道如何在这个例子中实现承诺
节点: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
但我需要为每个响应创建一个文件
答案 0 :(得分:0)
错误是由与for循环配对的异步执行引起的。当执行到达您调用writeResponse
的部分时,循环变量i
已增加到2,因此所有writeResponse
调用都有效地将arrPokemon[2]
作为其第一个参数。< / p>
为了快速解决问题,你可以尝试这样的事情:
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))
}
答案 1 :(得分:0)
(代表OP发表答案):
更改function pokemon(){}
- &gt; pokemon()=>{}
更改var for(var i ...)
- &gt; for(let i)