Bacon.onEnd 不是函数
Bacon.onEnd is not a function
当我的系统产生错误时,这些错误会被收集并最终发送到工单 API。所有错误都按其优先级类型分组。因此,如果抛出两种不同的错误类型,则应发送两张票。
看起来像:
var tickets = [{
type: 'validation',
component: 1,
time: '2016-04-13T10:26:41.420Z',
messages: [ [Object], [Object], [...] ]
}, {
type: 'fatal',
component: 1,
time: '2016-04-13T10:26:41.420Z',
messages: [ [Object] ]
}];
该数组中的每个对象都应该一个接一个地发送,延迟 2 秒。 sendToTicketAPI() return 是一个 Promise,我还想 return 在发送所有票证时做出一个 Promise。我的想法是,我可以 resolve/reject 使用 .onEnd/.onError。
代码是:
var Bacon = require('baconjs'); //v0.7.71
createTicketWrapper(msg, fnResolve, fnReject) {
Bacon
.fromArray(tickets)
.bufferingThrottle(2000)
.flatMap(function (ticket) {
return sendToTicketAPI(ticket)
.then(function () {
return ticket;
});
})
.onError(function (err) {
console.error('Unexpected error msg', err);
if (fnReject)
fnReject();
})
.onEnd(function () {
if (fnResolve)
fnResolve()
});
}
但我得到:
[TypeError: Bacon.fromArray(...).bufferingThrottle(...).flatMap(...).onError(...).onEnd is not a function]
我不明白为什么 .onEnd 不是函数!?
也许另一种方法?
onError returns 取消订阅函数(没有 onEnd 函数:"Just like subscribe, this method returns a function for unsubscribing." 通过 https://baconjs.github.io/api.html#observable-onerror),而不是事件流(有)。
试试这个:
var Bacon = require('baconjs'); //v0.7.71
createTicketWrapper(msg, fnResolve, fnReject) {
var stream = Bacon
.fromArray(tickets)
.bufferingThrottle(2000)
.flatMap(function (ticket) {
return sendToTicketAPI(ticket)
.then(function () {
return ticket;
});
});
stream.onError(function (err) {
console.error('Unexpected error msg', err);
if (fnReject)
fnReject();
})
stream.onEnd(function () {
if (fnResolve)
fnResolve()
});
}
请注意,我将从 flatMap 创建的事件流分配给一个变量,然后使用它分别订阅 onError 和 onEnd。
当我的系统产生错误时,这些错误会被收集并最终发送到工单 API。所有错误都按其优先级类型分组。因此,如果抛出两种不同的错误类型,则应发送两张票。
看起来像:
var tickets = [{
type: 'validation',
component: 1,
time: '2016-04-13T10:26:41.420Z',
messages: [ [Object], [Object], [...] ]
}, {
type: 'fatal',
component: 1,
time: '2016-04-13T10:26:41.420Z',
messages: [ [Object] ]
}];
该数组中的每个对象都应该一个接一个地发送,延迟 2 秒。 sendToTicketAPI() return 是一个 Promise,我还想 return 在发送所有票证时做出一个 Promise。我的想法是,我可以 resolve/reject 使用 .onEnd/.onError。
代码是:
var Bacon = require('baconjs'); //v0.7.71
createTicketWrapper(msg, fnResolve, fnReject) {
Bacon
.fromArray(tickets)
.bufferingThrottle(2000)
.flatMap(function (ticket) {
return sendToTicketAPI(ticket)
.then(function () {
return ticket;
});
})
.onError(function (err) {
console.error('Unexpected error msg', err);
if (fnReject)
fnReject();
})
.onEnd(function () {
if (fnResolve)
fnResolve()
});
}
但我得到:
[TypeError: Bacon.fromArray(...).bufferingThrottle(...).flatMap(...).onError(...).onEnd is not a function]
我不明白为什么 .onEnd 不是函数!? 也许另一种方法?
onError returns 取消订阅函数(没有 onEnd 函数:"Just like subscribe, this method returns a function for unsubscribing." 通过 https://baconjs.github.io/api.html#observable-onerror),而不是事件流(有)。
试试这个:
var Bacon = require('baconjs'); //v0.7.71 createTicketWrapper(msg, fnResolve, fnReject) { var stream = Bacon .fromArray(tickets) .bufferingThrottle(2000) .flatMap(function (ticket) { return sendToTicketAPI(ticket) .then(function () { return ticket; }); }); stream.onError(function (err) { console.error('Unexpected error msg', err); if (fnReject) fnReject(); }) stream.onEnd(function () { if (fnResolve) fnResolve() }); }
请注意,我将从 flatMap 创建的事件流分配给一个变量,然后使用它分别订阅 onError 和 onEnd。