ember.js 如何在RSVP.allSettled后更新控制器

xmq68pz9  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(203)

在ember控制器中完成所有的rsvp promise之后,我如何在控制器中保存所有的错误状态并更新DOM?我得到了未定义的'this',控制器不再可访问。

  1. export default class someController extends Controller {
  2. @tracked errorlist = [];
  3. @action someAction {
  4. RSVP.allSettled(prommises).then(function(retarray){
  5. retarray.forEach((retstate) => {
  6. if (retstate.state == 'rejected') {
  7. this.errorlist.push(stateRet.reason);
  8. //'this' undefined, how to update errlist?
  9. }
  10. });
  11. })
  12. }
  13. }

字符串

w80xi6nr

w80xi6nr1#

有几件事你可以尝试,但这个(不太优雅的)解决方案应该会给予你想要的结果:

  1. export default class someController extends Controller {
  2. @tracked errorlist = [];
  3. @action
  4. someAction {
  5. const that = this;
  6. RSVP.allSettled(promises).then(function (retarray) {
  7. retarray.forEach((retstate) => {
  8. if (retstate.state == 'rejected') {
  9. that.errorlist.push(retstate.reason);
  10. }
  11. });
  12. });
  13. }
  14. }

字符串

就我个人而言,我会将errorlist.push移动到控制器上自己的方法中,这样你就可以调用这样的东西:

  1. export default class someController extends Controller {
  2. @tracked errorlist = [];
  3. @action
  4. someAction {
  5. RSVP
  6. .allSettled(promises)
  7. .then((retarray) => retarray.forEach(this.addToErrorIfRejected));
  8. }
  9. @action
  10. addToErrorIfRejected({ state, reason }) {
  11. if (state == 'rejected') this.errorlist.push(reason);
  12. }
  13. }

展开查看全部

相关问题