国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

涉及循環調用的異步編程技巧

imtianx / 1560人閱讀

摘要:先看問題第二次失敗,重新登錄這只表示算法,并不能執行第一次執行失敗,重試這只表示算法,并不能執行使用解決實例可以運行的。

先看問題
login_label: login(user, pass, function(result) {
    doSomeThing_label: doSomeThing(result, function(err) {
        switch(err) {
        case "disconnect":  // 第二次失敗,重新登錄
            goto login_label;  // 這只表示算法,并不能執行
        case "retry":  // 第一次執行失敗,重試
            goto doSomeThing_label;  // 這只表示算法,并不能執行
        default:
            logout(function() {
                console.log("finish");
            }
        }
    }
}
使用Steps解決實例(可以運行的。例子中有沒有異步過程都不是問題,不信的可以自己改改驗證)
var Steps = require("promise-tiny/Steps");

new Steps({
    user: "foo",
    pass: "foolish",
    loginCount: 0,
    doSomeThingCount: 0
}) .on("Begin", function(next) {    // 從這里開始
        next("login", [this.user, this.pass]);
    })
   .on("login", function(next, user, pass) {
        console.log("login(""+user+"", ""+pass+"")");

        this.loginCount++;

        var result = true;    // 假設login總能成功
        console.log("    第"+this.loginCount+"次login成功");
        console.log();
        next("doSomeThing", "一些要做的事情...");
    })
   .on("doSomeThing", function(next, ...args) {
        console.log("doSomeThing(""+args+"")");

        this.doSomeThingCount++;

        if(this.doSomeThingCount === 1) {    // 假設第一次做不成功,重試一次
            console.log("    第"+this.doSomeThingCount+"次doSomeThing失敗,再試一次");
            next("doSomeThing", args);
        }
        else if(this.loginCount === 1) {    // 假設第二次做不成功,重新login
            console.log("    第"+this.doSomeThingCount+"次doSomeThing失敗,重新login");
            next("login", [this.user, this.pass]);
        }
        else {
            console.log("    第"+this.doSomeThingCount+"次doSomeThing完成了,要退出了");
            next("logout");
        }
        console.log();
    })
   .on("logout", function(next) {
        console.log("logout()");
    })

運行結果

login("foo", "foolish")
    第1次login成功

doSomeThing("一些要做的事情...")
    第1次doSomeThing失敗,再試一次

doSomeThing("一些要做的事情...")
    第2次doSomeThing失敗,重新login

login("foo", "foolish")
    第2次login成功

doSomeThing("一些要做的事情...")
    第3次doSomeThing完成了,要退出了

logout()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87738.html

相關文章

  • python基礎教程:異步IO 之編程例子

    摘要:創建第一個協程推薦使用語法來聲明協程,來編寫異步應用程序。協程兩個緊密相關的概念是協程函數通過定義的函數協程對象調用協程函數返回的對象。它是一個低層級的可等待對象,表示一個異步操作的最終結果。 我們講以Python 3.7 上的asyncio為例講解如何使用Python的異步IO。 showImg(https://segmentfault.com/img/remote/14600000...

    wangxinarhat 評論0 收藏0
  • 異步流程之Promise解析

    摘要:采用鏈式的,可以指定一組按照次序調用的回調函數。異步操作成功異步操作成功上面代碼中,第一個方法指定的回調函數,返回的是另一個對象。這時,第二個方法指定的回調函數,就會等待這個新的對象狀態發生變化。方法是的別名,用于指定發生錯誤時的回調函數。 好久沒有更新文章了,最近剛好遇到考試,而且一直在做數據庫課設。 本來這篇文章是上個星期想要分享給工作室的師弟師妹們的,結果因為考試就落下了。 其實...

    luoyibu 評論0 收藏0
  • node - 非阻塞異步 IO

    摘要:而線程是進程的一部分,二者相扶相依,其中單線程被稱為輕權進程或輕量級進程,執行特性線程只有個基本狀態就緒,執行,阻塞。以上所述證明了操作與其他函數的這種區別是由實現,是用多線程的方式,在標準的阻塞式上模擬非阻塞異步,線程池默認限制四線程。 node - 非阻塞的異步 IO 每當我們提起 node.js 時總會脫口而出 事件驅動、非阻塞I/O 和 單線程,所以我總結了以下幾點對這三項概念...

    yuxue 評論0 收藏0
  • node - 非阻塞異步 IO

    摘要:而線程是進程的一部分,二者相扶相依,其中單線程被稱為輕權進程或輕量級進程,執行特性線程只有個基本狀態就緒,執行,阻塞。以上所述證明了操作與其他函數的這種區別是由實現,是用多線程的方式,在標準的阻塞式上模擬非阻塞異步,線程池默認限制四線程。 node - 非阻塞的異步 IO 每當我們提起 node.js 時總會脫口而出 事件驅動、非阻塞I/O 和 單線程,所以我總結了以下幾點對這三項概念...

    keelii 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<