Bluebird spread在ping模块

时间:2016-01-12 17:09:17

标签: 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.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自然支持承诺,而 promisifyAll 可能在那里不必要。

我的实施中会缺少什么?

1 个答案:

答案 0 :(得分:0)

您需要使用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);
});