【快應用】如何獲取異步回調方法中返回的值

背景:異步回調或者異步promise的方式調用給參數deviceInfo賦值,然後再通過console日誌輸出,打印的參數的值爲空,該如何處理?

相關代碼:

<script>

  import push from "@service.push";

  import device from '@system.device';

  const injectRef = Object.getPrototypeOf(global) || global;

  // injection regeneratorRuntime

  injectRef.regeneratorRuntime = require('@babel/runtime/regenerator');

  module.exports = {

    data: {

      deviceInfo: ''

    },

    onCreate() {

      this.testAsync();

      console.log("this.$def.data:", this.$def.data);

    },

    async testAsync() {

      try {

        let res = await device.getInfo();

        console.info("get device id " + JSON.stringify(res.data));

        this.$def.data.deviceInfo = res.data

      } catch (e) {

        console.log("get device id error " + e.code);

      }

    },

    onDestroy() {

      console.info("Application onDestroy");

    },

    dataApp: {

      localeData: {}

    }

  };

</script>

運行效果:

cke_834.png

原因及解決方案:

異步方法的回調方法是異步返回的,調用該方法後,立刻打印該方法中的值,此時異步方法還未執行完成,就會導致後面打印的值爲空。可以加50ms的延時待異步方法返回結果後再去執行後面的代碼。

示例代碼:

<script>

  import push from "@service.push";

  import device from '@system.device';

  const injectRef = Object.getPrototypeOf(global) || global;

  // injection regeneratorRuntime

  injectRef.regeneratorRuntime = require('@babel/runtime/regenerator');

  module.exports = {

    data: {

      deviceInfo: ''

    },

    onCreate() {

      this.testAsync();

      setTimeout(() => {

        console.log("this.$def.data:", this.$def.data);

      }, 50);

 

    },

    async testAsync() {

      try {

        let res = await device.getInfo();

        console.info("get device id " + JSON.stringify(res.data));

        this.$def.data.deviceInfo = res.data

      } catch (e) {

        console.log("get device id error " + e.code);

      }

    },

    onDestroy() {

      console.info("Application onDestroy");

    },

    dataApp: {

      localeData: {}

    }

  };

</script>

運行效果:

cke_2830.png

欲瞭解更多更全技術文章,歡迎訪問https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章