gpt4 book ai didi

javascript - Backbone + Promises - 如何在发布后获取

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

我有一个模型,它有两个功能 - 一个是发布,一个是获取。

获取:

fetch: function (options) {
var self = this;

return P1Comm.get({
'dataType': 'json',
'processAjaxResponse': self.processAjaxResponse,
'onStatusInvalid': function (e) {
P1.log(e, 'status');
},
'onSuccess': options.success,
'onError': function (e) {
P1.log(e);
},
'sourceURL': P1.API_APPS_ROOT + 'v1.0/accepted-terms'
});
},

帖子:

acceptTerms: function (appId) {
var self = this;

self.set({
'app_id': parseInt(appId,10)
});
self.createEdit(self.toJSON(), {
}).pipe(function () {
var def = $.Deferred();
var saveOpts = {
dataType: 'json',
stringify: true,
contentType: 'application/json',
processData: false,
processAjaxResponse: self.processAjaxResponse
};
self.save(self.toJSON(), saveOpts);
return def.promise();
});
},

从 View 调用帖子:acceptAppTerms.acceptTerms(1);

这两者都有其自身的作用,但我想改变这一点,以便:- 进行 POST acceptTerms()- 然后进行 GET fetch()- 然后调用另一个函数

我认为会是这样的(至少对于前两点):

acceptAppTerms.acceptTerms(id).then(function () {
this.launchApp(event, id);
});

但是我收到错误 Uncaught TypeError: Cannot read property 'then' of undefined

我不太擅长前端 - 有人能指出我正确的方向吗?

谢谢

更新:

fetchAcceptedTerms: function () {
var self = this;
this.appAcceptedTerms = new T1AppAcceptedTerms();
this.acceptedTerms = new AppAcceptedTerms();

this.acceptedTerms.fetch({
success: function (data) {
if (data.meta.status === 'success') {
self.appAcceptedTerms.set(data.data);
}
}
});
},

下面的示例有效,但它破坏了模型中的数据设置。

最佳答案

您收到错误的原因是您的 acceptTerms 没有返回任何内容,或者换句话说,返回 undefined ,它没有 then( ) 方法。

你的代码应该是这样的:

fetch: function(options) {
var self = this;
return P1Comm.get({
dataType: 'json',
processAjaxResponse: self.processAjaxResponse,
onStatusInvalid: function(e) {
P1.log(e, 'status');
},
onSuccess: options.success,
onError: function(e) {
P1.log(e);
},
sourceURL: P1.API_APPS_ROOT + 'v1.0/accepted-terms'
});
},

acceptTerms: function(appId) {
var self = this;
self.set({
'app_id': parseInt(appId, 10)
});

return self.createEdit(self.toJSON(), {}).pipe(function() {
//---------------------------------------^ better use .then()
var saveOpts = {
dataType: 'json',
stringify: true,
contentType: 'application/json',
processData: false,
processAjaxResponse: self.processAjaxResponse
};
return self.save(self.toJSON(), saveOpts);
});
},

此代码假设 P1Comm.getself.createEditself.save 返回一个 Promise 对象。如果没有,那么您需要创建一个 Deferred 对象并从这些函数返回它的 promise 。在异步操作的成功/错误回调中,您需要相应地解决/拒绝 promise 。

我还想提一下.pipe()是一个已弃用的方法,您应该使用 then()除非您使用的是古老版本的 jQuery。

关于javascript - Backbone + Promises - 如何在发布后获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37343822/

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