程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在本机导航器中执行异步代码?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在本机导航器中执行异步代码??

开发过程中遇到如何在本机导航器中执行异步代码?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在本机导航器中执行异步代码?的解决方法建议,希望对你解决如何在本机导航器中执行异步代码?有所启发或帮助;

附件是一个小的工作示例。我想知道当导航容器在下面的示例中做出决定时如何执行异步代码。我知道在这段代码中,没有什么让异步变得特别,但在我的实际代码中,我有一个异步服务器获取功能。

import { Statusbar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet,Text,VIEw } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { ProvIDer as PaperProvIDer } from 'react-native-paper';
import { createDrawerNavigator } from '@react-navigation/drawer';

var is_authorized = false

async function doSomething(){
  console.log("I do something asynchronus here.")
  is_authorized = !is_authorized
}
function Drawer1(){
  return(
    <Text>Drawer 1</Text>
  )
}
function Drawer2(){
  return(
    <Text>Drawer 2</Text>
  )
}
function LoginScreen(){
  return(
    <Text>LoginScreen</Text>
  )
}
export default function App() {

    return (
    <PaperProvIDer>
      <NavigationContainer>
        {is_authorized ? (
            <Drawer.Navigator drawerContent={props => <DrawerContent {...props} />}>
              <Drawer.Screen name="Drawer1" component={Drawer1} /> 
              <Drawer.Screen name="Drawer2" component={Drawer2} />
            </Drawer.Navigator> 
          ) : (
            <LoginScreen/>
          )
        }      
      </NavigationContainer>
    </PaperProvIDer>  
  );
}

换句话说,每次执行 is_authorized ? ( 时,我都想在之前立即执行 await doSomething()。我不确定它是否相关,但我正在使用托管工作流(expo)运行它。

编辑:我认为需要运行的异步函数是一个循环,它检查 websocket 是否有新消息,并在等待消息时休眠。我在这里使用 await 睡觉。

this.websocket.onmessage = function(evt) {
  let Json_message = JsON.parse(evt.data)
  let message_ID = Json_message["message_ID"]
  this.message_Dict[message_ID] = Json_message;
}
//...
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve,ms));
}
//...
for (var i = 0; i < timeout*2; i++) {
  if (message_ID in this.websocket.message_Dict){
    ...
  }
  await sleep(500)
}

解决方法

这是一个有趣的问题。我会做一些假设,但我想我可以带你去你需要去的地方。根据您上面的代码,我将假设您在某种堆栈管理器中工作,该管理器会导入您项目中的所有文件。

您将需要一个 useState 函数。然后,在代码的某处,您需要编写一个“const”函数来返回一个承诺。然后,您可以接受该承诺并将其路由以检查它是否已在您的堆栈管理器中进行了身份验证。如果身份验证为真,它将允许您访问您的文件;否则它不会让你通过。它可能看起来像这样

const [authentication,setAuthentication] = React.useState(false) //this will set the initial return to be false,and will only navigate you forWARD if verified

const getAuthentication = () =>{
 (async () => { //this will execute the function asynchronously 
let authentication_promise = await server.is_auth() //this calls BACk to @R_944_10112@ I am assuming will be a server. It will determine authentication credentials from here
setAuthentication(authentication_promisE)//This fills the second part of the preset false variable above
    }
    )
   ()
return (authentication) //this returns either a true or false statement based on @R_944_10112@ "setAuthentication" returns
}


<NavigationContainer>
    { getAuthentication() ? ( //If credentials are verified,promise will return true,and change the initial "const" from above from false to true,and allow you to proceed.
...
}
</NavigationContainer>

大佬总结

以上是大佬教程为你收集整理的如何在本机导航器中执行异步代码?全部内容,希望文章能够帮你解决如何在本机导航器中执行异步代码?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: