Javascript 异步用于复杂计算,但不是 ajax 调用

Javascript asynchronous for complex calculation but not ajax calls

本文关键字:ajax 调用 异步 用于 复杂 计算 Javascript      更新时间:2023-09-26

在服务/工厂方法中执行服务器调用$http.post之前,我必须修改数据(某些算法,但不是ajax调用)。或者我也可以在调用服务/工厂之前在控制器中执行此操作?我可以像下面这样简单地做还是需要使用任何回调?

// controller
data = modify_data(data); //This is not ajax call but may take some seconds to complete so dont know if I can do this way or pass any callback
promise = MyService.create(data);
只要

modify_data不是异步的,你就不应该有问题。 在进行服务调用之前,数据将具有其价值。

你可以,但你可能会冻结用户界面,这是不希望的。

如果你不想冻结用户界面,你必须修改函数modify_data的内部,并使用setInterval方法或更确切地说,使用angularjs方法$interval https://docs.angularjs.org/api/ng/service/$interval

要使其正常工作,您的modify_data必须返回一个承诺,该承诺仅在您的流程结束时解决。

并且不要忘记使用 $interval.cancel() 来清理您的间隔!

所以外部代码将如下所示:

var defer = $q.defer();
// controller
modify_data(data).then(function(data){
    MyService.create(data).then(function(){
        defer.resolve();
    }, function(){
        defer.reject();
    });
});
return defer.promise;

请注意,我使用 $q.defer() 来处理 MyService.create() 的解析;

如果您需要一些帮助来使用$interval来削减您的modify_data过程,我们将需要它的代码。