Tampermonkey中使用GM_xmlhttpRequest对多个链接同时进行请求,将最先返回结果的值进行条件判断,要是符合条件不再获取后面的请求结果的值,要是不符合,依次获取第二个、第三个的返回结果的值进行条件判断,同样符合条件不再获取后面的,要是不符合条件,同样获取后面的值
使用AI写了一段代码,看注释和实际结果,貌似是先获取一个请求结果,进行判断,然后再等所有剩下的结果请求完成,再进行条件判断,并非依次等获取到请求结果就进行条件判断
const promises = [];
// 要请求的链接列表
var urlavl = 'https://www.aaa.com';
var urlero = 'https://www.bbb.com';
var urlkuti = 'https://www.ccc.com';
var urls = [urlwiki,urlero,urlkuti];
// 遍历链接列表,发起请求并存储 Promise 和对应条件
urls.forEach((url) => {
promises.push(new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: function(response) {
let domNew = new DOMParser().parseFromString(response.responseText, 'text/html');
resolve(domNew);
},
onerror: function(error) {
resolve('请求错误' + url);
}
});
}));
});
Promise.race(promises)
.then((data) => { // 获取 response 和 condition
// 判断第一个完成的请求是否满足对应条件
if(data.indexOf('#') > -1) {
console.log(data);
// 取消其他未完成的请求 (可选)
promises.forEach(promise => {
if (promise.cancel) {
promise.cancel();
}
});
} else {
// console.log(`链接不满足条件,等待其他结果...`);
// 使用 Promise.all() 等待所有请求完成
Promise.all(promises)
.then(results => {
// 遍历所有结果,查找满足对应条件的结果
console.log('重新查找')
results.forEach((data) => {
if(data.indexOf('#') > -1) {
console.log(data);
// console.log(`链接满足条件:`, response);
}
});
})
.catch(error => {
console.error("请求出错:", error);
});
}
})
.catch(error => {
console.error("请求出错:", error);
});
function Promise1() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
data: '123'
})
},2000);
})
}
function Promise2() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
data: '#234'
})
}, 2000);
})
}
function Promise3() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
data: '1'
})
}, 2000);
})
}
function mainRequest(promises) {
return new Promise((resolve) => {
let i = 0;
function nextRequest() {
if (i === promises.length) {
resolve('全部不符合条件')
return;
}
const request = promises[i]()
i++;
request
.then((result) => {
if (result.data.indexOf('#') > -1) {
resolve(result.data);
} else {
nextRequest();
}
})
.catch(() => {
nextRequest();
})
}
nextRequest();
})
}
mainRequest([Promise3, Promise2, Promise1]).then((result) => {
console.log('result', result);
})
这个链接可能存在安全风险,为了保护您的设备和数据安全,请避免访问此链接。
问题内容: 我正在尝试执行上述程序,但为同一程序提供了不同的值。对于给定的字符串执行多次时,是否有任何方法可以获取相同的字节? 问题答案: 在这里,您不打印a的值。正如owlstead在注释中正确指出的那样,将在字节数组上调用Object.toString()方法。导致这种格式的输出: 如果要打印数组中的每个元素,则必须遍历它。 甚至更简单,请使用以下方法:
是否可以在webclient上将多个请求链接在一起?例如,我希望在进行交易时能够更新买方和卖方的余额。现在它只更新买家余额: 是否有一种方法可以将两个put方法调用在一起,以便更新两个余额? 更新:此方法适用于将单声道值作为uri变量调用。
我有以下实体: 我还有一个Spring数据JPA存储库,定义如下: 当我从存储库中执行find-method时,我想急切地加载TextRow。因此,我在上面的代码中引入了NamedEntityGraph-和EntityGraph-注释。 在数据库的文本表中有2个条目,在文本行表中各有3个条目。 我希望findAllByBelongsTo方法返回一个包含两个文本实例的列表。相反,它返回一个包含6个文
我想在多个字段上进行日期直方图/范围聚合,并将结果存储在其他集合/索引中。因此,我可以在小时范围内使用查询/聚合使doc_count和。 聚合如下: 结果不出所料: 假设我解析了响应,并尝试将结果存储在其他索引/集合中。 存储聚合结果的最佳方式是什么,这样我就可以进行其他查询/聚合,以求和不同小时范围之间的“doc_count”? 例如:在“2016-07-17t00:00.000z”-“2016
问题内容: 假设有一个函数,应该执行一个HTTP请求并将其用于该请求。 如果在循环中调用if ,我希望下一个请求是在上一个完成之后执行的(串行执行,一个接一个)。为了不使回调和Promises混乱,我想使用async / await模式(与Babel.js一起编译以与Node 6+一起运行)。 但是,我不清楚如何等待响应对象进行进一步处理,以及如何作为以下结果返回它: 如果我使用 mocha 为H
我正在尝试使用FastAPI构建一个web应用程序。 启动web应用程序并将此URL输入web浏览器后: 该应用程序将返回一个实例的预测(例如,一个65岁的女性客户,收入38K,支出35K) 如何修改上述 URL 以查询两个观察结果,例如:收入为 38K 且花费 35K 的 65 岁女性客户和收入为 40K 且花费 37K 的 50 岁男性客户?