gpt4 book ai didi

ember.js - 是否可以拦截 Ember REST 调用和/或强制拒绝 promise ?

转载 作者:行者123 更新时间:2023-12-02 03:33:17 25 4
gpt4 key购买 nike

通常我可以像这样为被拒绝的 promise 编写错误处理程序:

user.save().then(function() {
// do stuff
}, function(reason) {
user.rollback();
_this.send('showModal', 'error');
});

假设我有另一个条件会导致 promise 失败 - 例如,我提前知道我的应用程序没有互联网连接。

我可以在保存前检查

if (this.get('connection.isOffline')) {
this.send('showModal', 'disconnected')
} else {

// proceed as normal...
user.save().then(function() {
}

但我不想一遍又一遍地复制这段代码。

一个想法是在应用程序离线时强制拒绝所有 promise ,然后在我的拒绝处理程序中我可以检查应用程序是否在线/离线并呈现适当的消息。

或者,我可以拦截所有 Ember REST 调用并首先检查连接性,如果应用程序离线则中止调用并呈现消息。

首选哪种方法?还有别的办法吗?

最佳答案

我认为您最好的选择是扩展/重新打开 DS.Model 并覆盖 .save() 以检查您的连接。您需要向 DI 容器注册您的连接对象/ Controller /任何东西,以便它在基础模型中可用,或者重新打开 DS.Model。

我不确定你的连接信息是如何确定的,或者它在你的应用程序中的什么时候可用..但是无论什么对象确定,我都会通过应用程序初始化程序和 container.register 将它注册到 DI 容器() 里面。然后在您覆盖的 save() 中执行 this.store.container.lookup("type:name").get('connection.isOffline') 检查连接状态并执行任何操作。您可以通过 this.store.container.lookup("route:application").send("offlineSaveAttempt"),或通过 DS.PromiseObject.create() 返回被拒绝的 promise ,以保持一致但失败更快.. 或其他。

要处理 find(),您必须在商店上扩展/重新打开 - 如果这是一个要求,您最好只处理商店而不接触 DS.Model。您感兴趣的方法是 .scheduleSave() 和 .find()。你会做同样的容器查找来找到你的连接对象/ Controller /任何东西,但只是 this.container.lookup()

关于ember.js - 是否可以拦截 Ember REST 调用和/或强制拒绝 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369989/

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