搜尋

首頁  >  問答  >  主體

node.js - 关于co用法的困惑

node小白,今天学习了下用Node写命令行工具。

然后有个TJ大神写的co包:

    co(function* (){
        yield setTimeout(function() {
            console.log(1);
        }, 5);
        
        yield setTimeout(function() {
            console.log(2);
        }, 1);
    });

最后这段代码执行的时候只输出了1。为什么没有输出2呢?

PHPzPHPz2777 天前565

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-17 15:31:26

    你的用法不符合規範,co允許yield一個promise、generatior、array、object,但不允許yield一個普通函數,必須是一個範式函數;
    yield第一個setTimeout時,該函數正常執行,但是執行後報錯:

    TypeError: You may only yield a function, promise, generator, array, or object, but the following object was passed: "[object Object]"

    報錯自然會中斷,所以程式碼不會往下執行,至於為什麼知道報上面這個錯誤,等你細讀源碼就會一清二楚

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 15:31:26

    tj/co 不完善,你可以用 hprose 裡面的 co 代替 tj/co,這裡有一篇介紹的文章:

    https://segmentfault.com/a/11...

    回覆
    0
  • 取消回覆