如何让javascript主线程睡眠?

时间:2015-01-21 07:55:22

标签: javascript multithreading firefox firefox-addon

我正在写一个firefox插件,我想在发出每个http请求之前做一些事情。伪代码:

observerService.addObserver(httpRequestObserver, "http-on-modify-request", false);
var httpRequestObserver=
{
    observe: function()
    {
            var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);

            asyncFunction1(){
                // asynchronous function No.1
            }.then(asyncFunction2(){
                // asynchronous function No.2, this function will be called after asyncFunction1 finished
                // do something to httpChannel (edit the request header etc.)
            });
        //point 1
    }
}

问题是asyncFunction2()可能在observe()完成后完成。而根据Firefox,请求将在observe()完成后发出。因此,当asyncFunction2()正在编辑httpChannel时,变量'httpChannel'已经过时(因为observe()结束)。

为了保持在asyncFunction2()完成之前没有发出请求,我需要做主动线程在第1点等待asyncFunction2()。我试图把'setTimeout(function waitfor(){},xxxx )'在第1点,但waitfor()在observe()结束后开始。我还尝试将asyncFunction1& 2放在chrome工作器(类似于web worker)中,让工作线程在asyncFunction2完成时发送一条消息。但是,执行主线程时,javascript似乎无法中断。我发现是javascript只放'收到消息!事件'进入任务队列。因此,当javascript处理消息时,observe()已经返回。

0 个答案:

没有答案