如何将任务推送到angularjs中的背景

时间:2016-02-01 06:55:02

标签: javascript angularjs background-process

我正在开展一个项目,我需要向客户发送消息。我想将此$ http呼叫推送到后台,并且只在顶部收到一条消息已发送的小消息。就像谷歌邮箱一样。现在我必须等待消息发送到那时我的模态冻结(我使用模态输入表格中的详细信息)。提前感谢您的帮助。

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

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

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

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

3 个答案:

答案 0 :(得分:0)

你可以通过使用AngularJS的Web Workers来做到这一点,这是一个服务中的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中Web工作者的工作示例

答案 1 :(得分:0)

如果您想立即关闭模式,请在发出请求前进行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);
            }
        })

答案 2 :(得分:0)

为此,您可以使用角度插件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/

- 瓦迪姆