【问题标题】:Revealing module pattern in AngularJS works except for promises在 AngularJS 中揭示模块模式除了 promises 之外的工作
【发布时间】:2017-04-20 17:15:52
【问题描述】:

我正在使用 AngularJS 开发一个项目。我们正在考虑使用显示模块模式,这样我们就可以在我们的控制器和服务中拥有私有功能。一切都按预期工作,除了承诺/异步数据。

这是一个例子:

export function SomeController( angularDependencies ) {
  'ngInject' 

  const path = $stateParams.path, // this works fine
        data = someService.getPromise(path) // this should return a promise

  return {
    path,
    data // returns {} instead of a promise
  }
}

我的问题是:有没有办法只在我解决所有承诺后才返回?像这样的:

Promises.all(allPromises).then((res) => {
  return { 
    path,
    'data': res
  }
})

我愿意使用 $q、rxjs、下划线等任何东西来让它工作。

更新:我将数据更改为:

const path = $stateParams.path,
      data = Promise.resolve(someService.getPromise(path))

现在我有一个出现在 Angular 范围内的对象,它是进度,但它是一个奇怪的对象。我想要的所有数据都在一个对象内,_v

所以我认为我正朝着正确的方向前进,但如果我发现任何新内容,我会更新此内容。

【问题讨论】:

  • 不...您不能等待承诺解决后再返回。这根本不可能。在某个地方,您将不得不使用回调来访问数据。
  • @KevinB 我将如何实现它?有什么我应该看的资源吗?
  • 承诺教程。
  • @KevinB 我对 Promise 很熟悉,但我还没有遇到任何可以解决这个用例的东西。如果你有一个教程可以帮助你,那么它不会出现在谷歌搜索的前十几页上,我很乐意看到它。

标签: javascript angularjs asynchronous promise revealing-module-pattern


【解决方案1】:

这就是我最终要做的事情。

export function SomeController( angularDependencies ) {
  'ngInject' 

  const path = $stateParams.path, // this works fine
    data = someService.getPromise(path) // returns a promise

  return {
    path,
    data // sends back a promise
  }
}

所以一旦控制器返回了 promise,我使用了一个过滤器将它加载到 html 中: angular1-async-filter

这就是在 Angular 2+ 中处理承诺的方式,我只是没有在 AngularJS 中处理它的好方法。

现在我可以{{ someAsyncData | async }} 得到我想要的结果。

所以这个问题的答案是我无法解决承诺然后将其作为我模块的一部分返回,但我可以找到一种方法来处理模块之外的承诺。

【讨论】:

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