AngularJS 中的揭示模块模式有效,但 promises 除外
Revealing module pattern in AngularJS works except for promises
我正在使用 AngularJS 开发一个项目。我们正在考虑使用揭示模块模式,这样我们就可以在我们的控制器和服务中拥有私有功能。除了 promises/async 数据外,一切都按预期工作。
这是一个例子:
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
}
}
我的问题是:有没有办法只在我完成所有承诺后才执行 return?像这样:
Promises.all(allPromises).then((res) => {
return {
path,
'data': res
}
})
我愿意使用 $q、rxjs、下划线,任何可以让它工作的东西。
更新:我将数据更改为:
const path = $stateParams.path,
data = Promise.resolve(someService.getPromise(path))
现在我有一个对象显示在 Angular 的范围内,这是一个进步,但它是一个奇怪的对象。我想要的所有数据都在一个对象中,_v
。
所以我认为我正朝着正确的方向前进,但如果我发现任何新内容,我会更新它。
这是我最后做的。
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
}
}
因此,一旦控制器 return 实现了承诺,我就使用过滤器将其加载到 html 中:
angular1-async-filter
这是Angular 2+中处理promise的方式,我只是在AngularJS中没有好的处理方式。
现在我可以 {{ someAsyncData | async }}
并且得到我想要的结果。
所以这个问题的答案是我无法解决承诺,然后 return 它作为我模块的一部分,但我可以找到一种方法来处理模块外的承诺。
我正在使用 AngularJS 开发一个项目。我们正在考虑使用揭示模块模式,这样我们就可以在我们的控制器和服务中拥有私有功能。除了 promises/async 数据外,一切都按预期工作。
这是一个例子:
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
}
}
我的问题是:有没有办法只在我完成所有承诺后才执行 return?像这样:
Promises.all(allPromises).then((res) => {
return {
path,
'data': res
}
})
我愿意使用 $q、rxjs、下划线,任何可以让它工作的东西。
更新:我将数据更改为:
const path = $stateParams.path,
data = Promise.resolve(someService.getPromise(path))
现在我有一个对象显示在 Angular 的范围内,这是一个进步,但它是一个奇怪的对象。我想要的所有数据都在一个对象中,_v
。
所以我认为我正朝着正确的方向前进,但如果我发现任何新内容,我会更新它。
这是我最后做的。
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
}
}
因此,一旦控制器 return 实现了承诺,我就使用过滤器将其加载到 html 中: angular1-async-filter
这是Angular 2+中处理promise的方式,我只是在AngularJS中没有好的处理方式。
现在我可以 {{ someAsyncData | async }}
并且得到我想要的结果。
所以这个问题的答案是我无法解决承诺,然后 return 它作为我模块的一部分,但我可以找到一种方法来处理模块外的承诺。