0
我有以下測試代碼;藍鳥傳播通過ping模塊返回undefined
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可能在那裏是不必要的。
在我的實現中會丟失什麼?
它傳播到你的錯誤處理程序嗎? Promisify需要一個節點'err,result'回調,而'probe'方法只返回一個參數。您可能需要創建自定義函數而不是promisify或使用[this](http://stackoverflow.com/questions/24194808/bluebird-promisify-and-callback-with-no-error-argument)。 –
實際上,在查看庫後,您可以使用'ping.promise.probe('site')' –
@ BenFortune啊,我錯過了這一點!感謝您的注意,並且在我使用之後,它按預期工作。 –