【问题标题】:React Native - Async/Await on Class not working as expectedReact Native - 类上的异步/等待未按预期工作
【发布时间】:2016-09-02 16:43:17
【问题描述】:

这是我的代码...

'use strict';
var React = require('react-native');
var {
  AsyncStorage
} = React;



exports.buildUrl = function(){
  var test = new Sales();
  test.getOrder();
}

class queryBuilder{

  constructor() {

  }

  getUrl(){
    AsyncStorage.getItem('auth').then((value) => {
      var auth = JSON.parse(value);
      var store = auth.url;
      console.log('store = ' + store);
      return store;
    });
  }

}

class Sales extends queryBuilder{

  async getOrder(){
    console.log('get order hit');
    try{
        var urlstart =  await this.getUrl();
    } catch(e) {
      console.log('ERROR')
      console.log(e);
    }
    console.log('URL BELOW');
    console.log(urlstart);
    console.log('URL ABOVE');
  }

}

在我的getOrder 方法中,我希望urlstart 不会是undefined,因为我使用了等待。

getUrl() 方法中的 console.log 是我控制台中最后返回的内容。

也许是那种星期六的感觉,非常感谢任何帮助!

【问题讨论】:

  • 为什么不把它变成一个简单的async getUrl() { return JSON.parse(await AsyncStorage.getItem('auth')).url; }

标签: javascript react-native ecmascript-6 es6-promise


【解决方案1】:

我自己解决了这个问题。 Async Await 要求在我正在调用的函数上返回一个承诺。 我已经修改了getUrl() 方法,如下所示..

  getUrl(){
    return new Promise(function(resolve, reject) {
      AsyncStorage.getItem('auth').then((value) => {
        var auth = JSON.parse(value);
        var store = auth.url;
        console.log('store = ' + store);
        resolve(store);
      });
    }

任何进一步的建议仍然非常感谢。

更新更好,感谢 Yuri

getUrl(){ return AsyncStorage.getItem('auth').then(value => JSON.parse(value).url) }

【讨论】:

  • getUrl(){ return AsyncStorage.getItem('auth').then(value => JSON.parse(value).url) } 应该够了
  • 只显示 function 本身只需要返回,我只是有错误的范围?
  • 既然你已经有一个承诺,你不需要手动创建一个。简单的返回就足够了。
  • 请更新您的答案,在这种情况下使用 new Promise 是一种反模式。
猜你喜欢
  • 2019-04-19
  • 2020-03-04
  • 2019-04-07
  • 2022-01-22
  • 2018-12-02
  • 1970-01-01
  • 2021-07-15
  • 2021-12-08
  • 2023-03-03
相关资源
最近更新 更多