不是吧?,自己顶一下!!找了段代码少了一个类,不明白可以先看一下这个类的调用方法var s = new Semaphore(); 
var myID = null; 
s.p(function (e) { //把方法放入信号量队列 
ServerHandler.getID(function (id) { 
myID = id; 
s.v(); //释放信号量 

}); 
s.p(function (e) { //将第二个方法放到信号量队列,只有当前面的s.v()执行之后,这个方法才会执行。 
ServerHandler.getName(myID, function (name) { //此时,可以保证myID一定有值 
alert(”Hello:” + name); 
s.v(); 
}) 
})  求Semaphore类怎么写

解决方案 »

  1.   

    不了解你具体的逻辑是怎样的可以这样写:
    Semaphore = function(){}
    Semaphore.prototype = {
      query:[],
      p:function(f){
        this.query.push(f);
      }
      v:function(){
        this.query.pop()();  //一定要两个括号
      }
    }var s = new Semaphore();
    s.p(function(){});  // 将方法加入队列
    s.v();  //自动执行下一个方法 
      

  2.   

    再顶吧,大家有遇到过AJAX异步的问题吧,怎么解决的?如:
    var myID = null; 
    ServerHandler.getID(function (id) { 
    myID = id; //无法预料何时会执行这句话 
    }); 
    ServerHandler.getUserWithID(myID, function (name) { 
    /* 
    此时myID还没有值,因为上面的 myID = id这段代码是需要一个时间段之后才会执行的 
    */ 
    alert(”hello:” + name); 
    });
    除了回调还有其他办法吗?
      

  3.   

    我一直用AJAX异步,觉得回调足够用了啊,要信号量怎么用呢?
    另外你是直接写AJAX请求吗?有没有用prototype或者jQuery?
      

  4.   

    JavaScript没有多线程的概念,确实不知道要信号量干嘛。
    你在xmlhttprequest.onreadystatechange = function(){}这里写的就是返回之后的操作,是确保了有返回值之后才会被调用的。
    如有特殊逻辑处理,请贴源码,或者你需要考虑一下将你的代码重构以适应一下Ajax的调用方式。这和java中的多线程同步是两码事儿
      

  5.   

    能给个简单的例子吗?javascript我一直没怎么用过,弄得我一头雾水,拜谢了!!
      

  6.   

    自己去 www.w3school.com.cn 看看吧,入门知识这里都有