用react调用异步函数

时间:2018-01-19 10:31:55

标签: javascript reactjs react-native

我在静态类

中编写此函数
  remove(){
    Keychain
    .resetGenericPassword(Config.keychainGroupe)
    .then(function() {
      AsyncStorage.removeItem('data', (err) => console.log('data deleted, return true', err));
    });
  }

如果数据被成功删除,我想异步返回true,所以我可以通过调用await MyClass.remove()来使用该函数。我从AsyncStorage中删除项目后尝试返回true但是当我用awairt调用该函数时我得到了未定义

3 个答案:

答案 0 :(得分:1)

您可以使用async-await

 async remove(){
        try {
          const data = await Keychain.resetGenericPassword(Config.keychainGroupe)
          try {
            await AsyncStorage.removeItem('data');
            return true;
          } catch (error) {
              return false
          }
        }
        catch(error) {
             console.log('keychain method failed')
        }
    }

答案 1 :(得分:1)

您可以使用Promiseasync-await

从承诺的then方法返回值的确切方法如下

1)使用承诺

remove(){

    //Notice return before the Keychain

    return Keychain
        .resetGenericPassword(Config.keychainGroupe)
        .then(function() {
            AsyncStorage.removeItem('data', (err) => console.log('data deleted, return true', err));
            return true;
        });
}

remove(){
    return new Promise((resolve, reject) => {
        Keychain
            .resetGenericPassword(Config.keychainGroupe)
            .then(() => {
                AsyncStorage.removeItem('data', (err) => console.log('data deleted, return true', err));
                resolve(true);
            }).catch((err) => {
            reject(err);
        });
    });
}

2)使用async-await

    async remove(){
            try {
              const resolvedData= await Keychain.resetGenericPassword(Config.keychainGroupe)
              if(resolvedData){
                  try {
                      await AsyncStorage.removeItem('data');
                      return true;
                  } catch (err) {
                      console.log('data deleted, return true', err);
                  }
              }
            }
            catch(err) {
                 console.log('Something went wrong with executing resetGenericPassword');
            }
        }

答案 2 :(得分:0)

试试return Promise.resolve(true);。它将true值包装在下一个事件循环类型的Promise中。有关承诺的更多详细信息,请查看好书系列中的mdn promises documentation和/或Promises chapter 您不了解JS