如何获取 Ember 组件对象内部承诺成功或错误回调

How to get Ember component object inside promise success or error call back?

本文关键字:承诺 内部 成功 回调 错误 对象 组件 何获取 获取 Ember      更新时间:2023-09-26

我已经传递了两个回调函数成功和错误,使用 then 方法从 ajax 调用返回。现在我无法在成功/错误方法中获取 Ember 组件对象。

import Ember from 'ember';
export default Ember.Component.extend({
    data:null,
    issueType:'',
    description:null,
    prepareSubmitRaiseIssueModal:function(){
        var data = this.get('data');
        this.set('ticket.category',data.category);
        this.set('ticket.name',this.get('session.currentUser.first_name'));
        this.set('ticket.phone',this.get('session.currentUser.phone'));
        this.set('ticket.groupId',data.groupId);
        this.set('ticket.ownerId',this.get('session.currentUser.id'));
        this.set('ticket.oyoId',this.get('session.currentOwnerHotelOyoId'));
        this.set('ticket.ticketRaisedBy','owner');
        this.set('ticket.bookingId',data.bookingId);
        this.set('ticket.subType',data.subType);
        this.set('ticket.subSubIssue',data.subSubIssue);
        this.set('ticket.email',this.get('ticket.oyoId')+'@oyoproperties.com');
        this.set('ticket.subject',this.get('ticket.oyoId')+' : '+this.get('ticket.category'));
        this.set('ticket.description',this.get('description'));
    },
    success:function(){
        console.log(this.get('description'));
    },
    error:function(){
        console.log(this.get('description'));
    },
    actions :{
        submitIssue:function(){
            this.prepareSubmitRaiseIssueModal();
            this.get('ticket').submitRaiseIssue().then(this.success,this.error);
            //this.send('closeRaiseIssueModal');
        },
        closeRaiseIssueModal:function(){
            this.sendAction('closeRaiseIssueModal');
        }
    }
});
如果不是传递命名函数,

而是传递匿名函数,我能够获取 Ember 组件对象。

submitIssue:function(){
            var self = this;
            this.prepareSubmitRaiseIssueModal();
            this.get('ticket').submitRaiseIssue().then(function(response){
                console.log(self.get('description'));
            },
            function(err){
                console.log(self.get('description'));
            });
            //this.send('closeRaiseIssueModal');
        },

有什么方法可以获取 Ember 组件对象对前一种情况的引用?

哇说

意大利面。

prepareSubmitRaiseIssueModal:function(){
        var data = this.get('data');
        this.set('ticket.category',data.category);
        this.set('ticket.name',this.get('session.currentUser.first_name'));
        this.set('ticket.phone',this.get('session.currentUser.phone'));
        this.set('ticket.groupId',data.groupId);
        this.set('ticket.ownerId',this.get('session.currentUser.id'));
        this.set('ticket.oyoId',this.get('session.currentOwnerHotelOyoId'));
        this.set('ticket.ticketRaisedBy','owner');
        this.set('ticket.bookingId',data.bookingId);
        this.set('ticket.subType',data.subType);
        this.set('ticket.subSubIssue',data.subSubIssue);
        this.set('ticket.email',this.get('ticket.oyoId')+'@oyoproperties.com');
        this.set('ticket.subject',this.get('ticket.oyoId')+' : '+this.get('ticket.category'));
        this.set('ticket.description',this.get('description'));
    },

怎么样

prepareSubmitRaiseIssueModal:function(){
        var data = this.get('data');
        var ticket = this.get('ticket')
        ticket.setProperties({
           'category': data.category,
           'name': ...
        })
    },

要传递引用,您可以使用

promise.then(function() {
     this.mysuccess();
}.bind(this), function() {
     this.myerror();
}.bind(this))

const self = this; 
promise.then(function() { 
    self.blah();
});

promise.then(result => { 
    this.blah();
}) 

在您的情况下,我会编写一个实用程序JS文件来显示通知。

并亲自处理每个承诺的成功,并让错误以一般的错误方法处理。

实用程序/通知.js

function reportError(error) {
    displayNotification('error', getErrorMessage(error));
}

import reportError from 'utils/notifications';
export default Ember.Controller.extend({
....
promise.then(result => {
   // Do custom stuff with result;
}, reportError);
....
});

在承诺中承诺

return promise1.then(x => {
   return promise2.then(x2 => {
       return promise3 ... etc
   })
}).catch(reportError); // Single hook needed but u need to return promises