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啊,我错过了这一点!谢谢你的注意,在我使用它之后,它就如预期的那样工作了。