<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Ascs基于 Fiber 實(shí)現(xiàn) async/await 庫(kù)

          聯(lián)合創(chuàng)作 · 2023-09-28 13:59

          Ascs == as C#,基于 Fiber 實(shí)現(xiàn)的類似于C# 的 async/await 的庫(kù),擺脫 callback 的痛苦。

          Promise 大家都懂,但是在 JS 這個(gè)這么喜歡做輪子的領(lǐng)域里面不做一個(gè)好像對(duì)不起自己似的。

          Ascs 很簡(jiǎn)單,就 3 個(gè) API:

          • Ascs.env 相當(dāng)于聲明這是一個(gè)異步(async)的環(huán)境,在這里面 ascs 才有效

          • Ascs.conv 把一個(gè)常規(guī)的異步回調(diào)函數(shù)轉(zhuǎn)換為 ascs 的異步函數(shù),讓你告別回調(diào)(callback必須要是最后一個(gè)參數(shù))

          • Ascs.await 執(zhí)行 ascsFunction 之后會(huì)返回一個(gè) task,使用這個(gè)函數(shù) ascs.await(task) 可以等待返回并且獲取返回值

          下面是一個(gè)簡(jiǎn)單的例子:

          function delayToDo(a, b, cb) {
            var result = a + b;
            setTimeout(function() {
              cb(result * result);
            }, 1000);
          } 
          
          var delayToDoAsync = ascs.conv(delayToDo);
          
          ascs.env(function() {
            // 一般寫法 
            delayToDo(1, 2, function(r) {
               console.log(r);
            });
            // ascs寫法,等待返回
            var result = ascs.await(delayToDoAsnc(1, 2));
            console.log(result[0]); // 返回的是數(shù)組,相當(dāng)于是回調(diào)函數(shù)參數(shù)
          })();

          更多例子可以看 demo

          常見問(wèn)題:

          • 瀏覽器能用嗎?

                  做的時(shí)候沒想過(guò)瀏覽器,我又不是前端。想前后端兼容的建議用wind.js啊

          • 和ES6兼容嗎?

                  可以看看commit的歷史,其實(shí)曾經(jīng)想過(guò)兼容,但是generator的yield的作用于并不能實(shí)現(xiàn)像Lua那種效果,所以還是放棄了。不過(guò)由于是基于Fiber實(shí)現(xiàn),基本上node/iojs都可以用。

          • ES7 也有async await,這玩意還有用嗎?

                  等ES7出來(lái)再算吧...ES6都還沒全

          • 還有什么要說(shuō)?

              ascs只是一種嘗試,沒有什么野心,就是走心,玩玩。另外,相比起實(shí)際項(xiàng)目,ascs更加適合用于制作library,可以很方便為你的庫(kù)提供async/await風(fēng)格的接口(使用ascs.conv轉(zhuǎn)換一下就好),實(shí)際項(xiàng)目改造起來(lái)會(huì)需要一定工作。

          更多請(qǐng)關(guān)注 https://github.com/drzunny/ascs

          瀏覽 10
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费人成视频在线 | www久久 | 看A∨免费观看 | 3p两根一起进女学生 | 黄色免费网站在线 |