Node.js Bluebird spread返回未定义的ping模块
我有以下测试代码Node.js Bluebird spread返回未定义的ping模块,node.js,promise,ping,bluebird,Node.js,Promise,Ping,Bluebird,我有以下测试代码 var Promise = require("bluebird"); var ping = require('ping'); Promise.promisifyAll(ping); Promise.some([ ping.sys.probe("google.com"), ping.sys.probe("yahoo.com"), ping.sys.probe("microsoft.com"), ping.sys.probe("facebook.c
var Promise = require("bluebird");
var ping = require('ping');
Promise.promisifyAll(ping);
Promise.some([
ping.sys.probe("google.com"),
ping.sys.probe("yahoo.com"),
ping.sys.probe("microsoft.com"),
ping.sys.probe("facebook.com")
], 2).spread(function (first, second) {
debugger;
console.log(first, second);
}).catch(Promise.AggregateError, function (err) {
err.forEach(function (e) {
console.error(e.stack);
});
}).error(function(err){
console.log("error: " + err);
});
// ping.sys.probe("google.com", function(isAlive){
// var msg = isAlive ? 'host ' + "google.com" + ' is alive' : 'host ' + "google.com" + ' is dead';
// console.log(msg);
// });
出于某种原因,函数进入扩展处理程序,但两个值都未定义。
自然是支持承诺的,promisifyAll在那里可能没有必要
我的实现中缺少什么?您需要使用promise方法,它们位于
ping.promise
。图书馆不需要承诺,所以你可以把它拿出来
Promise.some([
ping.promise.probe("google.com"),
ping.promise.probe("yahoo.com"),
ping.promise.probe("microsoft.com"),
ping.promise.probe("facebook.com")
], 2).spread(function (first, second) {
debugger;
console.log(first, second);
}).catch(Promise.AggregateError, function (err) {
err.forEach(function (e) {
console.error(e.stack);
});
}).error(function(err){
console.log("error: " + err);
});
它是否会传播到错误处理程序?promisify需要一个节点
err,result
回调,而probe
方法只返回一个参数。你可能需要创建一个自定义函数,而不是promisify或use。事实上,在查看库之后,你可以使用ping.promise.probe('site')
@BenFortune啊,我错过了这一点!谢谢你的注意,在我使用它之后,它就如预期的那样工作了。