不退出的 Promisify 函数
Promisify function that does not exit
我正在尝试 util.promisify
bonjour npm package。这是文档中描述的原始用例:
var bonjour = require('bonjour')()
// advertise an HTTP server on port 3000
bonjour.publish({ name: 'My Web Server', type: 'http', port: 3000 })
// browse for all http services
bonjour.find({ type: 'http' }, function (service) {
console.log('Found an HTTP server:', service)
})
这不会退出 - bonjour.find()
保持打开状态寻找 http 服务器。
我想承诺这个,并在扫描服务器后成功解决承诺。类似于:
var bonjour = require('bonjour')
const util = require('util');
// advertise an HTTP server on port 3000
bonjour().publish({ name: 'My Web Server', type: 'http', port: 3000 })
// promisify the 'find' function
const find = util.promisify(bonjour().find.bind(bonjour()));
(async () => {
try {
const content = await find({ type: 'http' });
console.log(content)
} catch (err) {
// It will always error, although, the value of 'err' is the correct content.
console.error('There was an error');
}
})();
如评论中所述,它总是会抛出错误,即使 err
的值是所需的输出。
promisify 进程需要退出代码 0,我怀疑这不会发生,因为进程没有 return。这是正确的假设吗?有没有人有任何其他见解或解决方案来让我承诺不抛出错误但 return 当前抛出的值?
谢谢!
那是因为bonjour
回调不符合Node.js回调签名(err, data) => {}
。实际上,bonjour.find
的回调将成功值作为第一个参数。您可以将其包装在这样的代理函数中:
function findWrapper(options, func) {
function callback(data, err) {
func(err, data);
}
return bonjour().find(options, callback);
}
const find = util.promisify(findWrapper);
我正在尝试 util.promisify
bonjour npm package。这是文档中描述的原始用例:
var bonjour = require('bonjour')()
// advertise an HTTP server on port 3000
bonjour.publish({ name: 'My Web Server', type: 'http', port: 3000 })
// browse for all http services
bonjour.find({ type: 'http' }, function (service) {
console.log('Found an HTTP server:', service)
})
这不会退出 - bonjour.find()
保持打开状态寻找 http 服务器。
我想承诺这个,并在扫描服务器后成功解决承诺。类似于:
var bonjour = require('bonjour')
const util = require('util');
// advertise an HTTP server on port 3000
bonjour().publish({ name: 'My Web Server', type: 'http', port: 3000 })
// promisify the 'find' function
const find = util.promisify(bonjour().find.bind(bonjour()));
(async () => {
try {
const content = await find({ type: 'http' });
console.log(content)
} catch (err) {
// It will always error, although, the value of 'err' is the correct content.
console.error('There was an error');
}
})();
如评论中所述,它总是会抛出错误,即使 err
的值是所需的输出。
promisify 进程需要退出代码 0,我怀疑这不会发生,因为进程没有 return。这是正确的假设吗?有没有人有任何其他见解或解决方案来让我承诺不抛出错误但 return 当前抛出的值?
谢谢!
那是因为bonjour
回调不符合Node.js回调签名(err, data) => {}
。实际上,bonjour.find
的回调将成功值作为第一个参数。您可以将其包装在这样的代理函数中:
function findWrapper(options, func) {
function callback(data, err) {
func(err, data);
}
return bonjour().find(options, callback);
}
const find = util.promisify(findWrapper);