gpt4 book ai didi

javascript - 如何在 Bacon.js 中获取 Ajax 调用的状态?

转载 作者:行者123 更新时间:2023-11-28 01:54:16 24 4
gpt4 key购买 nike

jQuery 的 Ajax 处理程序在其 Promise 解析时返回一个参数数组,初始元组为 ([data], "status")。我发现当我使用 Bacon.fromPromise 时,我得到的只是数据。我如何获取事务的状态,以及如何处理 jQuery 的任何实际失败?

我想要做的是从两个不同的 URL 下载两个具有相同架构的数据包并将它们连接起来。我想我已经弄清楚了串联,但错误处理让我发疯。这是我正在尝试的:

requestData = Bacon.fromPromise $.get @users_stories
requestRefs = Bacon.fromPromise $.get @reference_stories

success = (d, s) -> s == "success"
fetchFailure = requestData.map(success).not()
.merge(requestRefs.map(success).not())
fetchFailure.onValue => alert "Failed to download"

最佳答案

我认为,您应该使用流对象的错误回调,而不是查找状态文本。 For example ,合并请求并处理任何错误(JS,抱歉,我不熟悉 Coffee Script):

requestData.merge(requestRefs).onError(function(e) {
alert("Failed to download: " + e.responseText);
});

或者,您可以使用 mapError 函数将错误事件合并到可观察流中:

requestData.merge(requestRefs).mapError(function(e) {
return e.statusText;
}).onValue(function(next) {
if (next.feed) {
// handle feed
} else {
alert("Error: " + next);
}
});

Fiddle

编辑

fromPromise source可以看到任何对“数据”对象的引用都会被吞掉。 fromPromise 对您给出的 promise 所做的所有事情都是将可观察对象的处理程序绑定(bind)到 promise.then 的“已解决”和“已拒绝”回调:

Bacon.fromPromise = function(promise, abort) {
return Bacon.fromBinder(function(handler) {
promise.then(handler, function(e) {
return handler(new Error(e));
});
return function() {
if (abort) {
return typeof promise.abort === "function" ? promise.abort() : void 0;
}
};
}, function(value) {
return [value, end()];
});
};

换句话说,访问状态文本的唯一方法是保存对 Promise 对象的引用。但您不需要这样做——您所需要的只是处理 Bacon 的 observable.onError

关于javascript - 如何在 Bacon.js 中获取 Ajax 调用的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19351099/

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