首页 > 解决方案 > 无法从 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 中的最后一项。我是所有这一切的初学者,请提供帮助。

标签: node.js

解决方案


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: ... }
   ...
})

推荐阅读