SAP UI5 batch 請求的響應解析流程分析

注销發表於2022-02-16

batch 請求的回覆:

使用合適的 handler 解析:

該 handler accept 欄位:multipart/mixed

首先根據響應欄位,獲取 content-type:

content-type 欄位,透過;分隔:

media type:multipart/mixed

返回一個 JSON 物件,包含 mediaType 和 boundary 屬性:

batch 請求的處理器是 batchParser:

執行下一行 readBatch 方法:

boundary 的一個例子:batchresponse_16aba97e-4311-41a4-8c64-302727d1d02e
readBatch 的具體處理邏輯還是,基於字串匹配,即使用 indexOf 查詢 boundary 字串:

readline 的實現就是讀取單行:

batch 第一個 part 的頭部欄位被讀取了出來:

media type 必須和硬編碼的值一致:application/http

batch 包含的第一個請求 count 的資料已經讀取成功了:

已經讀取成功了,還要 dispatch:

count 的 media-type 是 text/plain:

return false 了,response 的 body 有值,data 為 undefined:

有4個可用的 handler:

text/plain 負責讀取 response.body.

textParser 的邏輯最簡單,直接返回 body 欄位給 response.data:

讀取第二個 part:

這個 part 的 content-type 為 json,因此使用 json handler:

if (handlerAccepts(handler, cType)) {
            var readContext = createReadWriteContext(cType, version, context, handler);
            readContext.response = response;
            response.data = parseCallback(handler, body, readContext);
            return response.data !== undefined;
        }

上述程式碼的語義是,只有當一個 handler 透過了函式 handlerAccepts 的過濾之後,才能呼叫 parseCallback,將解析的結果,傳遞給 response.data.

json handler 使用 JSON.parse 原生 API 進行 json 資料的序列化操作。

序列化成功的 json 資料:

最後返回的 response 是一個陣列:

呼叫最外層的 success handler:

batch 請求的回撥函式,在函式 _submitBatchRequest 內部:

更多Jerry的原創文章,盡在:"汪子熙":

相關文章