Javascript 循环网络请求,直到结果中的条件匹配
我正在尝试使用GoCardless API来确定客户群中是否存在电子邮件地址。 我试图实现的是提取第一组100个结果,如果检查这些结果中的电子邮件是否与我正在检查的电子邮件匹配。 如果是,则返回Javascript 循环网络请求,直到结果中的条件匹配,javascript,node.js,Javascript,Node.js,我正在尝试使用GoCardless API来确定客户群中是否存在电子邮件地址。 我试图实现的是提取第一组100个结果,如果检查这些结果中的电子邮件是否与我正在检查的电子邮件匹配。 如果是,则返回true。如果没有,那么它将使用第一组结果中给出的游标再次调用API,并继续调用,直到到达末尾或找到结果为止 一旦找到结果,它将中断循环并返回true。如果它到达结果的末尾,但没有找到匹配项,则返回false 我不能完全理解下面的逻辑,然后我还遇到了在循环中等待的问题 const data = await
true
。如果没有,那么它将使用第一组结果中给出的游标再次调用API,并继续调用,直到到达末尾或找到结果为止
一旦找到结果,它将中断循环并返回true。如果它到达结果的末尾,但没有找到匹配项,则返回false
我不能完全理解下面的逻辑,然后我还遇到了在循环中等待的问题
const data = await client.customers.find({limit: 100});
const customers = data.customers;
let found = customers.some(c => c.email === data.email);
if (found) return true;
let cursor = data.meta.cursors.end;
let finished = false;
while (cursor || !finished) {
// eslint-disable-next-line no-await-in-loop
const data = await client.customers.find({limit: 100, cursor});
const f = customers.some(c => c.email === data.email);
if (f) {
finished = true;
found = true;
}
}
return finished && found;
有人能建议我如何修改此项以获得所需的结果吗?您应该使用
列表而不是查找,并在后续调用中使用一次调用返回的游标(之前/之后):
let after;
while(true) {
let res = client.customers.list({limit: 100, after});
if(res.resources.length === 0) {
return false; // No more customers to look through
}
if(res.resources.some(c => c.email === theEmailYouAreLookingFor)) {
return true;
}
after = res.cursors.after;
}
他们的库还有一个助手方法,可以为您遍历页面!发件人:
具有列表
方法的所有资源也将具有附加的*All
方法。此方法与常规的list
方法类似,接受相同的参数,但返回异步生成器
在编写本文时,可以找到customers.all()
的实现
类似的内容可能适用于您的用例:
wait(client.customers.all()的const customer)的{
如果(customer.email==”hello@example.com") {
log(`Found!${customer.id}`);
打破
}
}
根据GoCardless的文档,find
用于查找单个客户。您将需要使用列表
。您将从调用X获得一个游标,然后该游标将在调用X+1中使用。