js多個非同步請求,按順序執行next

2021-10-05 06:32:59 字數 1878 閱讀 1439

在js裡面,偶爾會遇見需要多個非同步按照順序執行請求,又不想多層巢狀,,這裡和promise.all的區別在於,promise或者jquery裡面的$.when 是同時傳送多個請求,一起返回,發出去的順序是一起;這裡是按照順序發請求

方法 一 、首先建立乙個迭代器,接收任意多個函式引數

function

nextregister()

;function

nexttime()

}}if(args[count]

&& object.prototype.tostring.

call

(args[count])==

'[object function]'

)}

建立多個非同步的函式,注入到迭代器中

/*

comm:多個函式,公用的變數

next:呼叫下乙個函式

* */

function

fn1(comm,next)

function

fn2(comm,next)

function

fn3(comm,next)

//開始執行迭代

nextregister

(fn1,fn2,fn3)

;

在這裡,fn1-fn3函式中,做非同步操作,知道在非同步成功的時候呼叫next()就可以繼續執行下乙個函式,同時可以將前面函式返回的結果,繫結在comm上,帶到下乙個函式中

方法 二、參考express 和 koa 的寫法

1、es5寫法

function

iterator()

iterator.prototype.

use=

function

(fn)

iterator.prototype.

run=

function

(ctx);}

let len =

this

.middlewares.length;

letnext

=function()

;for

(let i = len -

1; i >=

0; i--

)next()

;}var iterator =

newiterator()

;iterator.

use(

function

(ctx,next));

iterator.

use(

function

(ctx,next));

iterator.

run(

);

2、es6 的 async 寫法

class

iterator

use(fn)

async

run(ctx)

}let len =

this

.middlewares.length;

let next =

async()

=>

;for

(let i = len -

1; i >=

0; i--

)await

next()

;}}new

iterator()

;use

(async

(ctx,next)

=>);

use(async

(ctx,next)

=>);

run(

);

多個非同步請求保證執行順序 用遞迴

我們在程式設計的過程中可能會使用到一些非同步的請求,而且可能會有多個,並且前後之後可能會有某種依賴 必須前乙個執行成功,後面的才去呼叫,否則直接失敗。這種問題的解決方案就是遞迴。專案背景 我使用是vertx框架,主要是解決了發布多個模組的問題。vertx框架不知道沒有關係,只需要了解它在啟動的過程中...

JS中按照順序依次執行多個非同步任務

一 問題描述 二 思路 乙個請求完成之後再傳送下乙個請求,關鍵在於傳送乙個之後先停下來等待該請求完成,處理之後再繼續下乙個請求。生成器generator裡面的yield語句可以分割 程式遇到yield會停住,通過next語句可以一次執行乙個yield分割的語句,本文嘗試使用生成器完成依次傳送多個請求...

原生js 非同步請求

1 非同步請求的方法 iframe script xmlhttprequest comet 伺服器端發起 兩個必須的引數。get post 等,不區分大小寫,但通常用大寫字母來匹配http協議 想要快取資料時,最好使用get方法。如果傳false為其第三個引數,則該方法變為同步獲取資料,但一般不能這...