鍍金池/ 問答/HTML/ Javascript 中 自定義方法調(diào)用組件時需要在返回結果前等待

Javascript 中 自定義方法調(diào)用組件時需要在返回結果前等待

自定義的方法時需要判斷本地是否有文件所以需要調(diào)用getFileInfo方法,然后進行文件處理

function getLocalIcon(name) {
  let iconPath = "../images/category_ico/";
  let tail = ".png";
  var link = iconPath + name + tail;
  var ret = '';
  wx.getFileInfo({
    filePath: link,
    success: function (data) {
      ret = link;
    },
    fail: function (data) {
      ret = hosts + 'icon/' + name + tail;
    },
    complete: function(){
      console.log(ret);   //打印一
      return ret;
    }
  })
  return ret;
}

調(diào)用方法

icon = parseInt(bean.icon) == 0 ? wxLink.getLocalIcon(bean.img_url) : wxLink.getImgLink(bean.img_url,'icon');

console.log(icon)   //打印二

打印順序為 打印二 打印一,
在方法getLocalIcon被調(diào)用時 執(zhí)行了wx.getFielInfo方法 , 可是在執(zhí)行wx.getFielInfo結果的同時返回了ret,想要請教論壇的各位大神,在調(diào)用wx.getFieldInfo時怎么設置等待讓結果先暫停返回?

回答
編輯回答
枕頭人
放進去Promise 或者使用同步方法,或者 參考 讓小程序支持async-await - 個人文章 - SegmentFault 思否 -
2017年11月30日 03:53
編輯回答
慢半拍

在小程序中,你還是用回調(diào)函數(shù)的方式控制順序吧。 (Async/Await 以及 Promise可以用當然更好,使用callback也能實現(xiàn))

改寫你的getLocalIcon方法,添加一個回調(diào)函數(shù)作為參數(shù),在getFileInfo的complete時調(diào)用。

function getLocalIcon(name, callback) {
  let iconPath = "../images/category_ico/";
  let tail = ".png";
  var link = iconPath + name + tail;
  var ret = '';
  wx.getFileInfo({
    filePath: link,
    success: function (data) {
      ret = link;
    },
    fail: function (data) {
      ret = hosts + 'icon/' + name + tail;
      return callback && callback(ret);
    },
    complete: function(){
      console.log(ret);   //打印一
      return callback && callback(null, ret);
    }
  })
}

if(parseInt(bean.icon) == 0) {
  wxLink.getLocalIcon(bean.img_url, function(err, data) {
       if(err) {
           console.log(err);
       } else {
       console.log(data);  //打印二
       }
  })
} else {
  icon = wxLink.getImgLink(bean.img_url,'icon');
  console.log(icon);   //打印二
}
2018年3月21日 10:47