【问题标题】:How can I use callbacks between two AngularJS factories?如何在两个 AngularJS 工厂之间使用回调?
【发布时间】:2015-10-12 17:53:58
【问题描述】:

在我的 AngularJS 应用程序中,我有两个工厂,名为“editInfo”和“pinVerify”。我想要做的是让editInfo工厂使用像pinVerify.sendPin(this.saveInfo)这样的回调函数调用pinVerify服务,然后将该方法保存在pinVerify工厂中,以便用户输入pin并按下调用@987654322的按钮@

这样做的问题是回调方法将被复制到 pinVerify 对象中,并且无法引用 editInfo 工厂中的属性。

所以...自然我尝试在 pinVerify 工厂中使用$q.defer() 代替,并在用户输入通过 SMS 发送的 pin 时在 pinVerify.pinEntered() 中解决它。

这工作得很好,我可以在 editInfo 工厂中这样做而不是使用回调:

pinVerify.sendPin().then(function() {
    this.saveInfo();
}

saveInfo 方法将检测 pin 是否正确并隐藏模式以输入它。当引脚不正确时会出现问题。

promise 已经解决了,所以再次点击调用pinVerify.pinEntered 的按钮基本上什么都不会做。我无法解决它两次。

所以现在我有点回到我开始的地方,并认真考虑在工作时大量饮酒......

对于如何在两个工厂之间完成这种关系有什么建议吗?我猜对好啤酒/伏特加酒的建议也很有效。

【问题讨论】:

  • 如果不了解此模式的工作原理,很难提供帮助。并查看更多代码。听起来$q.all(promise1,promise2) 可能会有所帮助....或者只是扔掉那个瓶子上的盖子
  • $q.all 对我没有帮助,因为pinVerify.pinEntered 可以被无限次调用,而输入引脚的实际验证是在其他工厂完成的 editInfo
  • 这是使用 angular-ui 模态吗?并且您在验证之前过早关闭了模式?
  • 不,它只是一个带有 ng-show 的 div,直到 editInfo 的 this.saveInfo(); 函数确定 pin 是否正确后才会关闭。我现在正在考虑使用调用 self.saveInfo() 的闭包方法来代替 - 看看这是否可行。在我的场景中,一个 $q 承诺似乎越来越不可能起作用。

标签: javascript angularjs angularjs-service


【解决方案1】:

虽然我在进入 $q 承诺之前的第一次尝试看起来像这样但没有奏效 - pinVerify.sendPin(self.saveAddress);

我刚刚自己解决了这个问题,使用闭包方法作为回调,然后在它内部使用之前声明的 var self = this; 像这样调用实际方法

pinVerify.sendPin(function() {
    self.saveAddress();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多