为什么我的代码首先打印“下载结束”,然后开始下载html页面?

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') }) 

为什么我的代码首先打印“下载结束”,然后开始下载html页面? 这个代码应该首先下载html页面,然后打印“下载”。

你需要返回你的地图

 return downloadAsync(url, name); 

基本上我们的代码并没有等待promise的解决,因为Promise数组没有承诺。