簡體   English   中英

在調試模式和正常模式之間響應本機不同的行為

[英]React native different behaviour between debug mode and normal mode

嗨,我有一個非常復雜的問題。 所以我在github上為這個問題創建了一個新的repo。 所以你可以克隆它,看看問題是什么。

https://github.com/guitar9/hafas-client-example

我在這個項目中使用https://github.com/public-transport/hafas-client獲取火車和火車站的信息。

client.journeys(münchenHbf, münchenPassing)
.then((response)=>{
  console.log('===============response=====================');
  console.log(response);
  console.log('====================================');
})
.catch(console.error)

請求在

node_modules/hafas-client/lib/request

問題是在調試模式下一切正常(搖動手機並啟動遠程JS調試),但當我停止JS調試時,我得到錯誤'PARSE'。

所以我在request.js中查找並在調試模式下注銷請求和響應,而不是在調試模式下。

請求調試模式

{
    "method": "post",
    "body": "{\"lang\":\"en\",\"svcReqL\":[{\"cfg\":{\"polyEnc\":\"GPA\"},\"meth\":\"TripSearch\",\"req\":{\"outDate\":\"20180614\",\"outTime\":\"174837\",\"ctxScr\":null,\"getPasslist\":false,\"maxChg\":5,\"minChgTime\":0,\"depLocL\":[{\"lid\":\"A=1@L=008000261@\"}],\"viaLocL\":null,\"arrLocL\":[{\"lid\":\"A=1@L=008004158@\"}],\"jnyFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"1023\"},{\"type\":\"META\",\"mode\":\"INC\",\"meta\":\"notBarrierfree\"}],\"getTariff\":false,\"outFrwd\":true,\"getPT\":true,\"getIV\":false,\"getPolyline\":false,\"numF\":5,\"trfReq\":{\"jnyCl\":2,\"tvlrProf\":[{\"type\":\"E\",\"redtnCard\":null}],\"cType\":\"PK\"}}}],\"client\":{\"id\":\"DB\",\"v\":\"16040000\",\"type\":\"IPH\",\"name\":\"DB Navigator\"},\"ext\":\"DB.R15.12.a\",\"ver\":\"1.16\",\"auth\":{\"type\":\"AID\",\"aid\":\"n91dB8Z77MLdoR0K\"}}",
    "headers": {
        "Content-Type": "application/json",
        "Accept": "application/json",
        "user-agent": "https://github.com/public-transport/hafas-client"
    },
    "query": {
        "checksum": "6af3b74db20e14c7f94012e3de55dce6"
    }
}

響應調試模式

所有信息。 一切都好。

請求不在調試模式下

{
    "method": "post",
    "body": "{\"lang\":\"en\",\"svcReqL\":[{\"cfg\":{\"polyEnc\":\"GPA\"},\"meth\":\"TripSearch\",\"req\":{\"outDate\":\"Invalid DateTime\",\"outTime\":\"Invalid DateTime\",\"ctxScr\":null,\"getPasslist\":false,\"maxChg\":5,\"minChgTime\":0,\"depLocL\":[{\"lid\":\"A=1@L=008000261@\"}],\"viaLocL\":null,\"arrLocL\":[{\"lid\":\"A=1@L=008004158@\"}],\"jnyFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"1023\"},{\"type\":\"META\",\"mode\":\"INC\",\"meta\":\"notBarrierfree\"}],\"getTariff\":false,\"outFrwd\":true,\"getPT\":true,\"getIV\":false,\"getPolyline\":false,\"numF\":5,\"trfReq\":{\"jnyCl\":2,\"tvlrProf\":[{\"type\":\"E\",\"redtnCard\":null}],\"cType\":\"PK\"}}}],\"client\":{\"id\":\"DB\",\"v\":\"16040000\",\"type\":\"IPH\",\"name\":\"DB Navigator\"},\"ext\":\"DB.R15.12.a\",\"ver\":\"1.16\",\"auth\":{\"type\":\"AID\",\"aid\":\"n91dB8Z77MLdoR0K\"}}",
    "headers": {
        "Content-Type": "application/json",
        "Accept": "application/json",
        "user-agent": "https://github.com/public-transport/hafas-client"
    },
    "query": {
        "checksum": "0d8186da7b06f9cc094075a2a6e21b00"
    }
}

響應不在調試模式下

{
    "ver": "1.16",
    "ext": "DB.R15.12.a",
    "lang": "eng",
    "id": "",
    "err": "PARSE",
    "svcResL": []
}

我已經比較了這些要求。 在這里你可以看到兩個請求之間的區別。 https://www.diffnow.com/?report=pvuq7問題是outDate,outTime和checksum。 有人可以幫幫我嗎?

問題是的用法力信通庫 hafas客戶端庫中。 您將看到repo中提供的代碼在iOS和Android上運行正常,只啟用了遠程調試。 為什么?

啟用遠程調試后,代碼不會在手機中運行,而是在Chrome瀏覽器的V8引擎中運行。 當禁用遠程調試時,代碼會在您的手機上運行,​​在Android的情況下,它在2014年末運行的JavaScriptCore(JSC)引擎上運行,該引擎使用自定義設置進行編譯,可能會產生不同的結果。

正如luxon文檔指出的那樣 ,對android上的本機反應的支持是有限的。

在iOS上,react native使用OS提供的JSC,其中還包括intl功能。 android上的JSC沒有int支持的原因是JSC與apk捆綁在一起,並且使用intl支持編譯它會使apk大小增加幾MB。

通過一些cutomizations(分叉hafas客戶端)和解決日期問題,我相信你應該能夠解決這個問題。 您也可以使用它,但要注意您可能會遇到其他可能難以獲得幫助的問題(有一段時間, Expo客戶端過去常常使用從此repo編譯的JSC,但他們不得不停止使用自定義構建因為一些問題)。

或者,您可以嘗試使用intl polyfill

我是怎么知道的? 在這里你會看到錯誤對象包含一堆額外的信息。 當您記錄錯誤時,您只是獲取description字段,但是如果您記錄request字段,您將看到它包含"outDate": "Invalid DateTime" 它就是!

hafas-client作者在這里。 發布作為可見性的答案,因為我沒有評論的聲譽。

正如我在https://github.com/public-transport/hafas-client/issues/56#issuecomment-399915315中記錄的那樣, 我設法使用了hafas-client@3.0.0-alpha.9 。在我添加了node-libs-react-native填充程序后,react-native中的框。 請試試這個。

當然也有可能是涉及到另一個問題, luxon (如在討論https://stackoverflow.com/a/51005700 ),但沒有起碼查詢數據EPARSE錯誤或者未解碼的響應有效載荷,以相關luxon ,顯然解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM