不是吧?,自己顶一下!!找了段代码少了一个类,不明白可以先看一下这个类的调用方法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类怎么写
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类怎么写
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(); //自动执行下一个方法
var myID = null;
ServerHandler.getID(function (id) {
myID = id; //无法预料何时会执行这句话
});
ServerHandler.getUserWithID(myID, function (name) {
/*
此时myID还没有值,因为上面的 myID = id这段代码是需要一个时间段之后才会执行的
*/
alert(”hello:” + name);
});
除了回调还有其他办法吗?
另外你是直接写AJAX请求吗?有没有用prototype或者jQuery?
你在xmlhttprequest.onreadystatechange = function(){}这里写的就是返回之后的操作,是确保了有返回值之后才会被调用的。
如有特殊逻辑处理,请贴源码,或者你需要考虑一下将你的代码重构以适应一下Ajax的调用方式。这和java中的多线程同步是两码事儿