摘要:先看問(wèn)題第二次失敗,重新登錄這只表示算法,并不能執(zhí)行第一次執(zhí)行失敗,重試這只表示算法,并不能執(zhí)行使用解決實(shí)例可以運(yùn)行的。
先看問(wèn)題
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解決實(shí)例(可以運(yùn)行的。例子中有沒(méi)有異步過(guò)程都不是問(wèn)題,不信的可以自己改改驗(yàn)證)
var Steps = require("promise-tiny/Steps"); new Steps({ user: "foo", pass: "foolish", loginCount: 0, doSomeThingCount: 0 }) .on("Begin", function(next) { // 從這里開(kāi)始 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()"); })
運(yùn)行結(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/87738.html
摘要:創(chuàng)建第一個(gè)協(xié)程推薦使用語(yǔ)法來(lái)聲明協(xié)程,來(lái)編寫(xiě)異步應(yīng)用程序。協(xié)程兩個(gè)緊密相關(guān)的概念是協(xié)程函數(shù)通過(guò)定義的函數(shù)協(xié)程對(duì)象調(diào)用協(xié)程函數(shù)返回的對(duì)象。它是一個(gè)低層級(jí)的可等待對(duì)象,表示一個(gè)異步操作的最終結(jié)果。 我們講以Python 3.7 上的asyncio為例講解如何使用Python的異步IO。 showImg(https://segmentfault.com/img/remote/14600000...
摘要:采用鏈?zhǔn)降?,可以指定一組按照次序調(diào)用的回調(diào)函數(shù)。異步操作成功異步操作成功上面代碼中,第一個(gè)方法指定的回調(diào)函數(shù),返回的是另一個(gè)對(duì)象。這時(shí),第二個(gè)方法指定的回調(diào)函數(shù),就會(huì)等待這個(gè)新的對(duì)象狀態(tài)發(fā)生變化。方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。 好久沒(méi)有更新文章了,最近剛好遇到考試,而且一直在做數(shù)據(jù)庫(kù)課設(shè)。 本來(lái)這篇文章是上個(gè)星期想要分享給工作室的師弟師妹們的,結(jié)果因?yàn)榭荚嚲吐湎铝恕?其實(shí)...
摘要:而線(xiàn)程是進(jìn)程的一部分,二者相扶相依,其中單線(xiàn)程被稱(chēng)為輕權(quán)進(jìn)程或輕量級(jí)進(jìn)程,執(zhí)行特性線(xiàn)程只有個(gè)基本狀態(tài)就緒,執(zhí)行,阻塞。以上所述證明了操作與其他函數(shù)的這種區(qū)別是由實(shí)現(xiàn),是用多線(xiàn)程的方式,在標(biāo)準(zhǔn)的阻塞式上模擬非阻塞異步,線(xiàn)程池默認(rèn)限制四線(xiàn)程。 node - 非阻塞的異步 IO 每當(dāng)我們提起 node.js 時(shí)總會(huì)脫口而出 事件驅(qū)動(dòng)、非阻塞I/O 和 單線(xiàn)程,所以我總結(jié)了以下幾點(diǎn)對(duì)這三項(xiàng)概念...
摘要:而線(xiàn)程是進(jìn)程的一部分,二者相扶相依,其中單線(xiàn)程被稱(chēng)為輕權(quán)進(jìn)程或輕量級(jí)進(jìn)程,執(zhí)行特性線(xiàn)程只有個(gè)基本狀態(tài)就緒,執(zhí)行,阻塞。以上所述證明了操作與其他函數(shù)的這種區(qū)別是由實(shí)現(xiàn),是用多線(xiàn)程的方式,在標(biāo)準(zhǔn)的阻塞式上模擬非阻塞異步,線(xiàn)程池默認(rèn)限制四線(xiàn)程。 node - 非阻塞的異步 IO 每當(dāng)我們提起 node.js 時(shí)總會(huì)脫口而出 事件驅(qū)動(dòng)、非阻塞I/O 和 單線(xiàn)程,所以我總結(jié)了以下幾點(diǎn)對(duì)這三項(xiàng)概念...
閱讀 3970·2021-09-23 11:32
閱讀 2649·2021-09-06 15:01
閱讀 1717·2021-08-18 10:24
閱讀 3609·2019-12-27 11:44
閱讀 3681·2019-08-30 15:52
閱讀 2588·2019-08-30 11:11
閱讀 820·2019-08-29 17:27
閱讀 673·2019-08-29 16:22