node.js - 无法从 then() 中获取数据 节点JS
问题描述
这是我的简单应用程序
for(var i = 0 ; i < prod.length;i++ ){
var urls = prod[i].URL
urls = urls.split(" ")[0];
scrapeIt(urls, {
avatar: {
selector: ".image img"
, attr: "src"
}
}).then(async ({ data, response }) => {
// console.log(`Status Code: ${response.statusCode}`)
urli = "https://www.choithrams.com"+data.avatar
var name = prod[i].Name
var price = prod[i].price
console.log(name)
})
}
我想一步一步地得到结果,但它没有正确迭代。其次,例如,我在外部有一个全局变量,我想从我得到的变量中覆盖它的值,我不能简单地做到这一点。
结果是
Mara Chopped Tomatoes Easy Open 400 gms
Mara Chopped Tomatoes Easy Open 400 gms
Mara Chopped Tomatoes Easy Open 400 gms
Mara Chopped Tomatoes Easy Open 400 gms
Mara Chopped Tomatoes Easy Open 400 gms
Mara Chopped Tomatoes Easy Open 400 gms
这是 mineJSON 中的最后一项。我是所有这一切的初学者,请提供帮助。
解决方案
Promise.all
在这种情况下最好使用:
Promise.all(prod.map(({ URL, Name, price }) => {
const URL = URL.split(" ")[0];
return scrapeIt(urls, {
avatar: {
selector: ".image img"
, attr: "src"
}
}).then(async ({ data, response }) => {
// console.log(`Status Code: ${response.statusCode}`)
const urli = "https://www.choithrams.com" + data.avatar
return {
urli, Name, price
}
})
})).then(results => {
// Results is an array of:
// { urli: "...", Name: "...", price: ... }
...
})
推荐阅读
- c# - 为什么我在加载/保存按钮上出现空异常?
- java - 需要 HtmlUnit 绕过 cloudflare DDOS 和 cookie
- python - 在一张图中叠加三个直方图
- excel - 检测到第一个重复实例后如何从字符串中提取文本?
- angular - 在解析器中使用重定向时,Angular 2 解析器会导致无限循环
- css - 折叠时将项目分组到下拉菜单中
- go - 使用 go 测试基于 urfave/cli 的应用程序
- python - 我需要一个单独的框架,与 tkinter 窗口上的 Python idle 相同
- python-3.x - Python 教程帮助 NLP 客户评论
- python - 用系列覆盖多索引数据帧的切片