gpt4 book ai didi

node.js - Bacon.onEnd 不是一个函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:40 25 4
gpt4 key购买 nike

当我的系统产生错误时,这些错误会被收集并最终发送到票证 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() 返回一个 Promise,我也想在发送所有票证时返回一个 Promise。我的想法是,我可以用 .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 返回一个取消订阅函数(它没有 onEnd 函数:“就像订阅一样,此方法返回一个用于取消订阅的函数。”通过 https://baconjs.github.io/api.html#observable-onerror ),而不是事件流(有)。

试试这个:

var Bacon = require('baconjs'); //v0.7.71createTicketWrapper(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。

关于node.js - Bacon.onEnd 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com