CNode

promise问题

问答
Ppostgetme发布于10 年前最后回复10 年前4 回复4657 浏览0 收藏

怎么我的代码先打印‘download over’,后执行下载呢???

function downloadAsync(url, name) {
  return new Promise(function(resolve, reject) {
    request(url, function(err, response, body) {
      if (err) {
        reject(err);
      } else {
        fs.writeFileSync(path.resolve(process.cwd(), 'downloaded_html', name), body);
        console.log('got ' + url);
        resolve();
      }
    })
  })
}

var urls = ['url1', 'url2', 'url3']

var promises = urls.map(function(url, i) {
  var name = i + '.html'
  downloadAsync(url, name)
})

Promise.all(promises).then(function() {
  console.log('download over')
})
查看回复

回复 (4)

P
postgetme#1·10 年前
var promises = urls.map(function(url, i) {
  var name = i + '.html'
  return  downloadAsync(url, name)
})

加个return就好了

K
klesh#3·10 年前

用箭头函数,可以省略 return

var promises = urls.map((url, i) => downloadAsync(url, i + '.html'))
M
magicdawn#4·10 年前

Array.prototype.map 的并发是 Infinity, 要控制并发可以使用

参与回复
登录后即可参与回复。登录