如何在 angularjs 中将任务推送到后台

how to push a task to background in angularjs

我正在做一个需要向客户发送消息的项目。我想将这个 $http 调用推到后台,只在顶部收到一条小消息,说明消息已发送。就像在 google 邮箱中一样。现在我必须等待消息发送到那时我的模态冻结(我正在使用模态在表格中输入详细信息)。预先感谢您的帮助。

var data = {
                "object":"value"
            };

            Data.post('url', data).then(function (result) {
                if (result.status != 'error') {
                    $modalInstance.close();
                    alert('sent message')

                } else {
                    console.log(result);
                }
            })

这是我需要发送到后台的进程。所以我想要的是,一旦我点击调用上述代码的发送报告按钮,模态就需要关闭。我希望上面的代码在后台 运行 并在顶部收到一条小警告消息,说明消息是否已发送

您可以通过将 Web Worker 与 AngularJS 结合使用来做到这一点,这是服务中的 webworker 示例

     var app = angular.module("myApp",[]);

    app.factory("HelloWorldService",['$q',function($q){

        var worker = new Worker('doWork.js');
        var defer = $q.defer();
        worker.addEventListener('message', function(e) {
          console.log('Worker said: ', e.data);
          defer.resolve(e.data);
        }, false);

        return {
            doWork : function(myData){
                defer = $q.defer();
                worker.postMessage(myData); // Send data to our worker. 
                return defer.promise;
            }
        };

});

here also Angular

网络工作者的工作示例

如果您想立即关闭模式,请在发出请求之前进行 close() 调用。

var data = {
            "object":"value"
        };

        $modalInstance.close();
        Data.post('url', data).then(function (result) {
            if (result.status != 'error') {
                alert('sent message')

            } else {
                console.log(result);
            }
        })

为此,您可以使用 angular 插件 https://github.com/vkiryukhin/ng-vkthread

它允许您在单独的线程中执行函数。

基本用法:

/* function to execute in a thread */
function foo(n, m){ 
    return n + m;
}

/* create an object, which you pass to vkThread as an argument*/
var param = {
      fn: foo      // <-- function to execute
      args: [1, 2] // <-- arguments for this function
    };

/* run thread */
vkThread.exec(param).then(
   function (data) {
       console.log(data);  // <-- thread returns 3 
    }
);

有关示例和文档,请参阅 http://www.eslinstructor.net/ng-vkthread/demo/

--瓦迪姆