繁体   English   中英

然后阻止需要async await with promises

[英]async await with promises is then block required

如何基本上异步等待正常? 我已经为AsyncStorage创建了一个帮助器,异步等待自动但是这个用户也必须使用async await或promise方法来获取值吗?

此代码有效,但无法正确使用语法。

这是我的代码:

class AsyncStorageHelper {
  static getItem = async (key: string) => {
    let value: any = "";
    try {
      value = await AsyncStorage.getItem(key);
    } catch (error) {
      console.log(`Error item: ${value}`);
      throw new Error(`Error ${value}`);
    }
    return value;
  };
}

AsyncStorageHelper.getItem("logins")
  .then(result => {
    if (result) {
      if (result === "1") {
        navigate(SCREEN1);
      } else {
        navigate(SCREEN2);
      }
    }
  })
  .catch(err => {
    navigate(LOGINSCREEN);
  });

如何将AsyncStorageHelper代码转换为异步等待取决于我想要导航到不同位置的结果。

异步函数和承诺返回函数可以以相同的方式在外部使用。

AsyncStorageHelper.getItem("logins")
  .then(result => {
    if (result) {
      if (result === "1") {
        navigate(SCREEN1);
      } else {
        navigate(SCREEN2);
      }
    }
  })
  .catch(err => {
    navigate(LOGINSCREEN);
  });

是相同的:

// note: this code must run in another async function
// so we can use the keyword await
try {
  const result = await AsyncStorageHelper.getItem("logins");
  if (result) {
    if (result === "1") {
      navigate(SCREEN1);
    } else {
      navigate(SCREEN2);
    }
  }
} catch (err) {
  navigate(LOGINSCREEN);
}

注意:您的代码具有未知的代码路径。 AsyncStorageHelper.getItem("logins")返回一个假值时会发生什么? 你基本上有一个noop,这可能不是理想的行为。

必须在异步函数中使用await。

 async function helper() { try { const result = await AsyncStorageHelper.getItem("logins"); if (result) { if (result === "1") { navigate(SCREEN1); } else { navigate(SCREEN2); } } } catch (error) { navigate(LOGINSCREEN); } } helper() 

class AsyncStorageHelper {

  static async getItem(key : string) {
    let value: any = ""
    try {
      value = await AsyncStorage.getItem(key)
    } catch (error) {
      console.log(`Error item: ${value}`)
      throw new Error(`Error ${value}`)
    }
    return value
  }
}

try {
  const result = await AsyncStorageHelper.getItem("logins")

  if (result)
    (result === "1") ? navigate(SCREEN1): navigate(SCREEN2)

} catch(err) {
  navigate(LOGINSCREEN)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM