You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中async await报错‘await对该表达式无效果’如何解决?

报错原因

'await' has no effect on the type of this expression.ts 是TypeScript的类型提示,说明你await的loginUser函数没有返回Promise类型,await对普通返回值的函数没有作用。

解决步骤

  • 第一步:修改loginUser函数,明确返回Promise
    你需要把loginUser改为async函数,确保内部的接口请求、AsyncStorage存储操作都被await处理,所有异步逻辑执行完成后再resolve,示例写法如下:
import AsyncStorage from '@react-native-async-storage/async-storage';
import axios from 'axios';

// 显式标注返回值为Promise,让TS明确识别类型
export const loginUser = async (
  userName: string, 
  password: string, 
  setShowLoader: (status: boolean) => void
): Promise<void> => {
  setShowLoader(true);
  try {
    // 等待接口请求完成
    const loginRes = await axios.post('/你的登录接口地址', { userName, password });
    // 等待用户信息存储到AsyncStorage完成
    await AsyncStorage.setItem('userInfo', JSON.stringify(loginRes.data));
  } catch (err) {
    // 抛出错误让上层catch捕获
    throw new Error(err instanceof Error ? err.message : '登录失败');
  } finally {
    setShowLoader(false);
  }
}
  • 第二步:检查loginHandle的写法
    你当前的loginHandle是高阶函数写法,返回的是另一个async函数,如果是绑定到按钮点击事件上,需要注意调用方式是否正确,避免逻辑不执行。另外如果signIn函数内部也包含读取AsyncStorage的异步操作,建议也加上await确保逻辑顺序正确:
const loginHandle = async(userName:string,password:string) => async() => {      
  // 注意补全你前面漏写的if判断逻辑
  if(/* 你的校验逻辑,比如账号密码非空判断 */){
    // 你的校验不通过逻辑
  }else{      
    try {
      // 此时loginUser已返回Promise,await生效
      await loginUser(userName, password, setShowLoader);
      // 如果signIn是异步函数,也建议加await
      await signIn(userName,password);
    }catch (error) {
      console.log(error instanceof Error ? error.message : '未知错误')
    }                         
  }      
}
  • 第三步:可选类型补充
    如果修改后仍有提示,可以在导入loginUser的地方手动确认导入路径是否正确,避免导入了错误的普通函数版本。

内容的提问来源于stack exchange,提问作者Guilherme Cavenaghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:54:02