对于 eval(wind.compile("async" ....的理解

64 views
Skip to first unread message

Ba Shi

unread,
Nov 1, 2012, 1:11:02 AM11/1/12
to win...@googlegroups.com
hi 
   老赵 ,昨天发微薄,可能没描述清楚,你没回复。
我对var asyncTask = eval(wind.compile("async",fnc)); 这个理解不是很清楚
看了文档,我觉得 如上的fnc 是一个“异步方法”,于是我 写了个demo

    var asyncTask = eval(wind.compile("async", function(){
        setTimeout( function(){
            console.log(2)
        },2000)
    }));
    var excut = eval(wind.compile("async", function (obj) {
        console.log(1);
        $await(asyncTask());
        console.log(3);
    }));
    excut().start();

我期望excut执行的时候,打印出1,然后等待asyncTask执行返回2,然后再继续执行返回3

可实际结果打印的是1,3,2  , 是这里理解错了吗? 好像  $await(asyncTask());并没有真的等待方法执行完成。

然后我看了Async.sleep(delay) 代码的实现,里面使用Task.create 创建了一个任务,然后回调里面通过t.complete("status")方法来通知外面该异步方法执行ok了。
这样的话,如我上面代码,怎么能在setTimeout里面通知外部呢,就是说在setTimeout里面怎么拿到该任务的t这个对象,然后调用complete

还请指点一下。

Jeffrey Zhao

unread,
Nov 4, 2012, 12:36:32 AM11/4/12
to win...@googlegroups.com
是我没看到,尽量不要用微博at的方式通知我啊,我一天要被at几百甚至几千次,基本不看的……
 
$await(asyncTask)显然是等任务完成了,只不过你的setTimeout意思就是说“不要等,发起个独立的setTimeout回掉”。
 
你这里不就是需要等待吗?为什么不能$await(Async.sleep(2000))以后再console.log(2)?
 
--
 
 
 
Reply all
Reply to author
Forward
0 new messages