如何等待节点流 API 的 on 'end' 事件?
How to await the on 'end' event of a Node Stream API?
我需要等待 API 的任务完成,然后再进行下一个任务。
我如何向此语法添加承诺/等待?
我需要使用排队功能,然后等待流完成,然后再继续任何进一步的代码。我尝试通过 .on('end', {}) 调用返回一个承诺,但没有成功。
非常感谢任何帮助。
const {SiteChecker} = require('broken-link-checker');
const siteChecker = new SiteChecker(options)
.on('error', (error) => {})
.on('robots', (robots, customData) => {})
.on('html', (tree, robots, response, pageURL, customData) => {})
.on('queue', () => {})
.on('junk', (result, customData) => {})
.on('link', (result, customData) => {})
.on('page', (error, pageURL, customData) => {})
.on('site', (error, siteURL, customData) => {})
.on('end', () => {});
siteChecker.enqueue(siteURL, customData);
您的代码几乎没问题,但为了使用 Promises,您需要将整个代码包装在其中。你会像这样实现:
const {SiteChecker} = require('broken-link-checker');
const siteChecker = new SiteChecker(options)
.on('error', (error) => {})
.on('robots', (robots, customData) => {})
.on('html', (tree, robots, response, pageURL, customData) => {})
.on('queue', () => {})
.on('junk', (result, customData) => {})
.on('link', (result, customData) => {})
.on('page', (error, pageURL, customData) => {})
.on('site', (error, siteURL, customData) => {});
await new Promise((resolve, reject) => siteChecker
.on('end', resolve)
// resolve is a function that you call when the work is done
.on('error' => reject)
// reject is the function you call when the task fails
.enqueue(siteURL, customData);
);
现在我不确定 broken-link-checker
在你的情况下是如何工作的,但如果你想重用整个解决方案,那么最好将整个事情包装在 promise 和 return siteChecker
引用如下:
const {SiteChecker} = require('broken-link-checker');
const siteChecker = await new Promise((resolve, reject) => {
const _sitechecker = new SiteChecker(options)
.on('error', (error) => {})
.on('robots', (robots, customData) => {})
.on('html', (tree, robots, response, pageURL, customData) => {})
.on('queue', () => {})
.on('junk', (result, customData) => {})
.on('link', (result, customData) => {})
.on('page', (error, pageURL, customData) => {})
.on('site', (error, siteURL, customData) => {});
.on('end', () => resolve(_sitechecker))
// notice that the sitechecker is passed here
.on('error' => reject);
sitechecker.enqueue(siteURL, customData);
});
这两种写法都会等到完成(或直到发出 end
事件)。
我需要等待 API 的任务完成,然后再进行下一个任务。 我如何向此语法添加承诺/等待?
我需要使用排队功能,然后等待流完成,然后再继续任何进一步的代码。我尝试通过 .on('end', {}) 调用返回一个承诺,但没有成功。
非常感谢任何帮助。
const {SiteChecker} = require('broken-link-checker');
const siteChecker = new SiteChecker(options)
.on('error', (error) => {})
.on('robots', (robots, customData) => {})
.on('html', (tree, robots, response, pageURL, customData) => {})
.on('queue', () => {})
.on('junk', (result, customData) => {})
.on('link', (result, customData) => {})
.on('page', (error, pageURL, customData) => {})
.on('site', (error, siteURL, customData) => {})
.on('end', () => {});
siteChecker.enqueue(siteURL, customData);
您的代码几乎没问题,但为了使用 Promises,您需要将整个代码包装在其中。你会像这样实现:
const {SiteChecker} = require('broken-link-checker');
const siteChecker = new SiteChecker(options)
.on('error', (error) => {})
.on('robots', (robots, customData) => {})
.on('html', (tree, robots, response, pageURL, customData) => {})
.on('queue', () => {})
.on('junk', (result, customData) => {})
.on('link', (result, customData) => {})
.on('page', (error, pageURL, customData) => {})
.on('site', (error, siteURL, customData) => {});
await new Promise((resolve, reject) => siteChecker
.on('end', resolve)
// resolve is a function that you call when the work is done
.on('error' => reject)
// reject is the function you call when the task fails
.enqueue(siteURL, customData);
);
现在我不确定 broken-link-checker
在你的情况下是如何工作的,但如果你想重用整个解决方案,那么最好将整个事情包装在 promise 和 return siteChecker
引用如下:
const {SiteChecker} = require('broken-link-checker');
const siteChecker = await new Promise((resolve, reject) => {
const _sitechecker = new SiteChecker(options)
.on('error', (error) => {})
.on('robots', (robots, customData) => {})
.on('html', (tree, robots, response, pageURL, customData) => {})
.on('queue', () => {})
.on('junk', (result, customData) => {})
.on('link', (result, customData) => {})
.on('page', (error, pageURL, customData) => {})
.on('site', (error, siteURL, customData) => {});
.on('end', () => resolve(_sitechecker))
// notice that the sitechecker is passed here
.on('error' => reject);
sitechecker.enqueue(siteURL, customData);
});
这两种写法都会等到完成(或直到发出 end
事件)。