我想在Node.js的XMPP客戶promisify事件發射器,這是我的代碼:使用與事件發射的承諾
this.watiForEvent = function (eventEmiter, type) {
return new Promise(function (resolve) {
eventEmiter.on(type, resolve);
})
};
this._response = function() {
return this.watiForEvent(this.client, 'stanza');
};
在上面的代碼我promisify的XMPP節事件發射器並使用它像這樣
東西CcsClient.prototype.responseHandler = function() {
var _this = this;
return _this._response().then(function (stanza) {
_this.responseLimit--;
if (stanza.is('message') && stanza.attrs.type !== 'error') {
var messageData = JSON.parse(stanza.getChildText("gcm"));
switch (messageData.message_type) {
case 'control':
if (messageData.control_type === 'CONNECTION_DRAINING') {
_this.draining = true;
}
return;
case 'ack':
return {
messageId: messageData.message_id,
from: messageData.from
};
gcm.responseHandler().then(function (options) {
console.log(options);
}).
catch (function (error) {
console.log(error);
});
我的問題是節剛剛被稱爲一次的事件。也許諾言不好?
'watiForEvent'有一個錯字。仔細檢查你的代碼。 – Tomalak
當然,它只被稱爲一次,你在等待下一個事件,然後用它履行你的承諾。你還期望什麼? – Bergi