javascript - 使用 Nodejs 进行异步编程 - 遍历链接数组,打开它们并在完成后将它们保存到 JSON

标签 javascript node.js json request

我有一个跟踪链接数组(大约 30 个),我想逐个打开这些链接,找出隐藏在它们后面的真实 URL。完成后,我想将“真实”URL 保存到 JSON 文件中。

URL 在被“检查”之前看起来像这样: https://www.trackinglink.com/1

然后是这样的: https://www.amazon.com/

我已经使用请求解决了跟踪链接的“发现”问题并且它有效。但是,我无法开始工作的是等待编写 JSON 文件,直到所有 URL 都被“请求”/检查。

我知道解决方案涉及 Async/Await 或 Promises,但我无法让它在 Node 中工作。对于更有经验的人来说,这可能只是几分钟的事情。

异步编程的概念对我来说非常新,但我已经花了相当多的时间来研究它。我认为我很难将知识转移到我的具体问题上。

非常感谢您的帮助。干杯!

const request = require('request');
const fs = require('fs'); 
let listWithRealUrls = [];

function grabAndSaveRealUrls() {

    let Urls = ['https://www.trackinglink/1', 'https://www.trackinglink/2', 'https://www.trackinglink/3']

    for (const Url of Urls) {
        request.get(Url, function () { 
            let realUrl = this.uri.href; 
            listWithRealUrls.push(realUrl)
        });

    }

    fs.writeFile('data.json', JSON.stringify(listWithRealUrls), function (err) {
        if(err) {
            console.log(err);
        } else {
            console.log('success');
        }
    })

}

grabAndSaveRealUrls();

最佳答案

感谢 Jonas 的评论和之前链接的“duplicate question” ',我设法解决了这个问题。我相信还有更优雅的方法,但我是这样做的:

const request = require('request');
const fs = require('fs'); 
let listHoldingPromises = [];

function grabAndSaveRealUrls() {
    let Urls = ['https://www.trackinglink.com/1', 'https://www.trackinglink.com/2', 'https://www.trackinglink.com/3']

    for (const Url of Urls) {


      let promise = new Promise(function(resolve, reject){

        request.get(Url, function () { 
            let realUrl = this.uri.href; 
            resolve(realUrl);
        });
      }) 

      listHoldingPromises.push(promise);

    }
}

grabAndSaveRealUrls();


Promise.all(listHoldingPromises).then(values => {
    fs.writeFile('data.json', JSON.stringify(values), function (err) {
        if(err) {
            console.log(err);
        } else {
            console.log('success');
        }
    })
  });

关于javascript - 使用 Nodejs 进行异步编程 - 遍历链接数组,打开它们并在完成后将它们保存到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939949/

相关文章:

javascript - 有时会进行带有特殊测试的 Jest

javascript - Firefox 中未定义事件

javascript - gapi.auth.authorize with immediate : true is not working

node.js - JSON 有效时 JSON 输入意外结束

javascript - 绕过 stopPropagation()

node.js - 使用 Express 将静态内容提供给子域?

javascript - 如何从被拒绝的外部 “throw”博克处理的被拒绝的 promise 中,如何在 “catch”方法内 “catch”?

c# - 如何处理 JsonConvert.DeserializeObject<T>() 返回的 Json 错误代码

java - 使用GsonBuilder和InputStream Android仅解析整个消息java的一个分支的JSON

node.js - Nodejs 流与 Braintree?