Bluebird 在 ping 模块上传播 returns undefined
Bluebird spread returns undefined over ping module
我有以下测试代码;
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);
// });
出于某种原因,函数进入了传播处理程序,但两个值都未定义。
ping module 自然支持 promises 并且 promisifyAll 在那里可能是不必要的。
我的实施中会遗漏什么?
您需要改用位于 ping.promise
的 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);
});
我有以下测试代码;
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);
// });
出于某种原因,函数进入了传播处理程序,但两个值都未定义。 ping module 自然支持 promises 并且 promisifyAll 在那里可能是不必要的。
我的实施中会遗漏什么?
您需要改用位于 ping.promise
的 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);
});