当有大量的CNAME需要parsing时,dns.resolveCname会失败
我正在编写一个解决大约10,000个CNAME的程序。
我Error: queryCname ESERVFAIL
的问题是,当要parsing的CNAME数Error: queryCname ESERVFAIL
时, dns.resolveCname()
将返回Error: queryCname ESERVFAIL
错误。
代码如下所示:
const dns = require('dns') dns.setServers(['8.8.8.8']) // provided by google let cnames = [....] // length of cnames is 10,000 let promiseArr = [] for (let i = 0; i < cnames.length; i += 1) { let p = new Promise((resolve, reject) => { dns.resolveCname(cnames[i], (err, records) => { if (err) { console.log(err) // this line generates Error: queryCname ESERVFAIL resolve() // sorry, I forgot adding this line. } else { console.log(records) resolve() // sorry, I forgot adding this line. } }) }) promiseArr.push(p) } Promise.all(promiseArr) .then(value => { console.log(`Promise.all done`) }) .catch(err => { console.log(`promise err: ${err}`) })
这是否意味着我不能太频繁地使用dns.resolveCname()
?
是否可以通过降低频率来避免这个问题我触发dns.resolveCname()
?
或者还有其他方法可以解决这个问题吗?
我正在使用node.js v6.2.2。
ESERVFAIL
– 应用程序查询api.example.com
,返回一个SERVFAIL错误,调用失败。
Promise.all
将catch
(停止执行),如果至less有一个asynchronous函数抛出一个错误。 所以在这种情况下你不能使用Promise,而对于10000个asynchronous调用来说这是一个不好的做法,你可以很容易地将所有的内存转储出去。
解决你的问题的一个方法是实现一个parallel limited queue
,它将解决错误和结果,然后你可以设法以适当的方式输出结果。
我发现一个实现有限队列的库是cwait
从他们的文档:
import * as Promise from 'bluebird'; import {TaskQueue} from 'cwait'; /** Queue allowing 3 concurrent function calls. */ var queue = new TaskQueue(Promise, 3); Promise.map(list, download); // Download all listed files simultaneously. Promise.map(list, queue.wrap(download))); // Download 3 files at a time.
- NodeJS&MongoDB – 基于ID数组获取对象
- 错误:“ReactFifteenAdapter.js”中找不到模块'react-dom / test-utils'“,对于jest-styled-componentsconfiguration,使用了React 15.4.1
- Node.js dns.resolve()与dns.lookup()
- Firebase函数 – getaddrinfo ENOTFOUND api.sandbox.paypal.com
- 使用Node.js,我如何检查一个域名是否被注册?
- 即使本地主机存在于/ etc / hosts(MacOS El Capitan)中,我也会在运行简单节点服务器时获得`getAddrInfo ENOTFOUND localhost`
- Node.js – 每个用户的子域名+允许自定义域名
- Node.js DNS查询 – 如何设置超时?
- 域名有或没有“www”
- 如何发布nodejs网站
- 如何用node.js dns.resolve函数find几个loggingtypes?