我有一个跟踪链接数组(大约 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/