成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

涉及循環(huán)調(diào)用的異步編程技巧

imtianx / 1570人閱讀

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

先看問題
login_label: login(user, pass, function(result) {
    doSomeThing_label: doSomeThing(result, function(err) {
        switch(err) {
        case "disconnect":  // 第二次失敗,重新登錄
            goto login_label;  // 這只表示算法,并不能執(zhí)行
        case "retry":  // 第一次執(zhí)行失敗,重試
            goto doSomeThing_label;  // 這只表示算法,并不能執(zhí)行
        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;    // 假設(shè)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) {    // 假設(shè)第一次做不成功,重試一次
            console.log("    第"+this.doSomeThingCount+"次doSomeThing失敗,再試一次");
            next("doSomeThing", args);
        }
        else if(this.loginCount === 1) {    // 假設(shè)第二次做不成功,重新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()");
    })

運行結(jié)果

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

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

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

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

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

logout()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87738.html

相關(guān)文章

  • python基礎(chǔ)教程:異步IO 之編程例子

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

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

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

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

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

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

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

    keelii 評論0 收藏0

發(fā)表評論

0條評論

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