在我们的AngularJS应用程序中,我们有一些非常繁重的操作,可能需要10秒钟,可以调用30次。为了不阻止UI,我们希望在后台进行该函数调用。但我无法弄清楚如何做到这一点。
我尝试使用$q
就像一个函数:
this.$q(resolve => {
resolve(someHeavyCalculation())
}).then(result => stuffWeHaveToDoAfterTheCall)
但这阻碍了我们的计划。
我尝试使用$q.defered
和setTimeout
进行异步调用
const defered = this.$q.defered()
setTimeout(() => {
defered.resolve(someHeavyCalculation())
})
defered.promise.then(result => stuffWeHaveToDoAfterTheCall)
这有效但是每隔8秒就会调用$timeout
,这会打破很多东西(也许是因为我们经常调用这个函数?)。
我尝试的最后一件事是希望$timeout
能够神奇地将呼叫提升到异步世界
this.$timeout(someHeavyCalculation).then(result => stuffWeHaveToDoAfterTheCall)
但这也不起作用。
那么将这个函数转化为承诺的正确方法是什么?