HarmonyOS Next中在Promise中执行while循环请求网络只会执行一次吗?

HarmonyOS Next中在Promise中执行while循环请求网络后只执行一次问题

有拉取服务端信箱消息,new Promise后启动while循环,等待网络请求,解析数据,如果解析数据后服务端还有数据只执行循环继续拉取,现在执行一次后下一次卡死不再执行了

03-25 15:51:14.469   15002-15027  C015b0/NetMgrSubsystem         com.beike.sdk.im      I     NETSTACK [http_response.cpp 49] HEAD: HTTP/1.1 200 OK
03-25 15:51:14.470   15002-15027  C015b0/NetMgrSubsystem         com.beike.sdk.im      I     NETSTACK [http_exec.cpp 336] priority = 1
03-25 15:51:15.359   15002-15008  C03f00/ArkCompiler             com.beike.sdk.im      I     [gc] SmartGC: finish app cold start
03-25 15:51:15.528   15002-15039  C057c4/IPCThreadSkeleton       com.beike.sdk.im      W     TlsDestructor 48: thread exit, flush commands
03-25 15:51:15.528   15002-15039  C057c4/IPCThreadSkeleton       com.beike.sdk.im      E     ~IPCThreadSkeleton 85: IPCThreadSkeleton delete
03-25 15:51:26.359   15002-15006  C01305/Appkit                  com.beike.sdk.im      I     [appfreeze_inner.cpp(NotifyANR:204)]reportEvent:THREAD_BLOCK_3S, pid:15002, bundleName:com.beike.sdk.im. success
03-25 15:51:26.362   15002-15002  C03f00/MUSL-SIGCHAIN           com.beike.sdk.im      E     signal_chain_handler call 0 rd sigchain action for signal: 35
03-25 15:51:26.362   15002-15002  C01305/Appkit                  com.beike.sdk.im      I     [mix_stack_dumper.cpp(Dump_SignalHandler:69)]Dump_SignalHandler.
03-25 15:51:26.362   15002-15002  C03f00/MUSL-SIGCHAIN           com.beike.sdk.im      E     signal_chain_handler call 2 rd sigchain action for signal: 35
03-25 15:51:26.362   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     DFX_SigchainHandler :: sig(35), pid(15002), tid(15002).
03-25 15:51:26.363   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     DFX_SigchainHandler :: sig(35), pid(15002), processName(com.beike.sdk.im), threadName(om.beike.sdk.im).
03-25 15:51:26.363   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     The clone thread(15078).
03-25 15:51:26.363   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     Finish handle signal(35) in 15002:15002
03-25 15:51:26.363   15002-15002  C03f00/MUSL-SIGCHAIN           com.beike.sdk.im      E     signal_chain_handler call 2 rd sigchain action for signal: 35 directly return
03-25 15:51:26.373   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     (15078) wait processdump(15081) exit.
03-25 15:51:26.374   15002-15082  C057c1/IPCWorkThread           com.beike.sdk.im      I     ThreadHandler 60: proto:0 policy:0 name:IPC_4_15082
03-25 15:51:26.422   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     (15078) wait for (15081) return with ret(15081) status(0)
03-25 15:51:29.357   15002-15006  C01305/Appkit                  com.beike.sdk.im      I     [appfreeze_inner.cpp(NotifyANR:204)]reportEvent:THREAD_BLOCK_6S, pid:15002, bundleName:com.beike.sdk.im. success
03-25 15:51:29.358   15002-15006  C01304/AbilityManagerService   com.beike.sdk.im      E     [app_recovery.cpp(ScheduleSaveAppState:172)]AppRecovery ScheduleSaveAppState. is not enabled
03-25 15:51:29.358   15002-15006  C01304/AbilityManagerService   com.beike.sdk.im      E     [app_recovery.cpp(ScheduleRecoverApp:230)]AppRecovery ScheduleRecoverApp. is not enabled
03-25 15:51:29.358   15002-15002  C03f00/MUSL-SIGCHAIN           com.beike.sdk.im      E     signal_chain_handler call 0 rd sigchain action for signal: 35
03-25 15:51:29.358   15002-15002  C01305/Appkit                  com.beike.sdk.im      I     [mix_stack_dumper.cpp(Dump_SignalHandler:69)]Dump_SignalHandler.
03-25 15:51:29.358   15002-15002  C03f00/MUSL-SIGCHAIN           com.beike.sdk.im      E     signal_chain_handler call 2 rd sigchain action for signal: 35
03-25 15:51:29.358   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     DFX_SigchainHandler :: sig(35), pid(15002), tid(15002).
03-25 15:51:29.359   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     DFX_SigchainHandler :: sig(35), pid(15002), processName(com.beike.sdk.im), threadName(om.beike.sdk.im).
03-25 15:51:29.359   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     Finish handle signal(35) in 15002:15002
03-25 15:51:29.359   15002-15002  C03f00/MUSL-SIGCHAIN           com.beike.sdk.im      E     signal_chain_handler call 2 rd sigchain action for signal: 35 directly return
03-25 15:51:29.359   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     The clone thread(15090).
03-25 15:51:29.367   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     (15090) wait processdump(15093) exit.
03-25 15:51:29.408   15002-15002  C02d11/DfxSignalHandler        com.beike.sdk.im      I     (15090) wait for (15093) return with ret(15093) status(0)
03-25 15:51:32.358   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:35.359   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:38.357   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:41.356   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:44.357   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:47.360   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:50.360   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:53.358   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:56.356   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:51:59.357   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:52:02.356   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:52:05.359   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:52:08.359   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
03-25 15:52:11.356   15002-15006  C01305/Appkit                  com.beike.sdk.im      E     [watchdog.cpp(Timer:126)]Watchdog timeout, wait for the handler to recover, and do not send event.
阅读 835
1 个回答

口味你好,看了你的问题,我觉得这个问题可能是由于Promise的执行机制导致的,解决这个问题的方法是使用递归调用替代while循环,确保Promise的结果返回后再继续下一次的拉取操作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进