Javascript 中 自定义方法调用组件时需要在返回结果前等待

自定义的方法时需要判断本地是否有文件所以需要调用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;
}

调用方法

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

console.log(icon)   //打印二

打印顺序为 打印二 打印一,
在方法getLocalIcon被调用时 执行了wx.getFielInfo方法 , 可是在执行wx.getFielInfo结果的同时返回了ret,想要请教论坛的各位大神,在调用wx.getFieldInfo时怎么设置等待让结果先暂停返回?

阅读 2.7k
2 个回答

在小程序中,你还是用回调函数的方式控制顺序吧。 (Async/Await 以及 Promise可以用当然更好,使用callback也能实现)

改写你的getLocalIcon方法,添加一个回调函数作为参数,在getFileInfo的complete时调用。

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);   //打印二
}
推荐问题
宣传栏