繁体   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