[英]Ember.RSVP.Promise with AJAX call
嗨,我正在尝试理解Promise与Ajax调用一起工作的方式。 我想将一个简单的Ajax调用发送到某个端点,但是我真的对代码语法感到困惑。 这是我的代码:
该代码的目的是使用户会话无效。 首先,客户端应向提供用户令牌的注销端点发送ajax调用,然后,如果服务器成功响应,我们将调用invalidate()方法以从客户端清除用户的数据。
import Ember from 'ember';
export default Ember.Controller.extend({
session: Ember.inject.service('session'),
actions: {
invalidateSession() {
const url = "http://namespace/logout/";
let logoutRequest = new Ember.RSVP.Promise(function(r,e){
r(this.ajax(url, "PUT", {auth_token});)
},
if (logoutRequest) {
this.get('session').invalidate();
}
}
}
});
我知道我的代码无法正常工作,但无法将所有内容放在一起...
使用ember-ajax应该可以工作:
ajax: Ember.inject.service(),
....
actions: {
invalidateSession(){
return this.get('ajax').request('url_goes_here', {
method: 'PUT',
data: {
some: "additional data"
},
}).then(function(success) {
// inform about successful logout, redirect...
}).catch(function(error) {
// handle or throw error
});
}
}
更新 :
如果您想将其包装在Promises中,请尝试以下操作:
...
如@locks所述,建议使用ember-ajax库,而不要使用原始Ember.$.ajax()
。 由于this.get('ajax').request()
返回了诺言,因此不再需要将其包装在诺言中。
但是,如果您只想注销,那么我建议您看一下ember-simple-auth库(插件),该库已经解决了将来可能需要的许多功能(登录,注销,失效,重定向到登录)路线...)。
您不能从这样的回调中使用this.ajax
。 但是无论如何,这都是不必要的,因为当ajax(…)
已经返回一个new Promise
时,您不需要。 就是这样
invalidateSession() {
const url = "http://namespace/logout/";
let logoutRequestPromise = this.ajax(url, "PUT", {auth_token});
return logoutRequestPromise.then((logoutRequestResult) => {
if (…) {
this.get('session').invalidate();
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.