小程序 报错errMsg: “hideLoading:fail:toast can‘t be found“ ?
小程序體驗版上/真機上報錯:errMsg:?"hideLoading:fail:toast can't be found" ?模擬器上卻看不到,
- wx.showLoading?和?wx.showToast?同時只能顯示一個;
- wx.showLoading?應與?wx.hideLoading?配對使用;
- 把請求接口統一封裝,開始請求接口時showLoading,請求接口后hideLoading
- 一個頁面同時請求多個接口,由于請求是異步的,很有可能上一個開啟了showLoading還沒請求完成下一個有開始請求了,這個時候的showLoading與hideLoading就沒有對應了。
一、錯誤代碼示例和解決方法?
import api from'./api' var host = 'http://127.0.0.1::5500/';/*** POST請求,* URL:接口* postData:參數,json類型* doSuccess:成功的回調函數* doFail:失敗的回調函數*/ //10016:token為空,10008:token無效,20037:集合為空 function request(url, postData) {postData.token = wx.getStorageSync("token");//相當于openidwx.showLoading({ title: '加載中...', mask: true });return new Promise((resolve, reject)=>{ wx.request({//項目的真正接口,通過字符串拼接方式實現url: url,header: {"content-type": "application/json;charset=UTF-8"},data: postData,method: 'POST',dataType: "json",success: function (res) {//參數值為res.data,直接將返回的數據傳入if(res.data.code === "0000"){resolve(res.data);} else {wx.showToast({ title: res.data.msg, icon: 'none', duration: 2000 });} },fail: function (err) {reject(err)},complete: function(res){wx.hideLoading();}})}) }/*** module.exports用來導出代碼* js文件中通過var call = require("../util/request.js") 加載* 在引入引入文件的時候" "里面的內容通過../../../這種類型,小程序的編譯器會自動提示,因為你可能* 項目目錄不止一級,不同的js文件對應的工具類的位置不一樣* 使用: call.post("接口地址", {參數}, function(res){})*/ module.exports.post = request; module.exports.get = getData;這是我第一次封裝的代碼,看邏輯沒什么問題,但是真機調試第一次打開總是報錯。經過測試發現:
- success 比 complete 先運行。因此上面代碼 wx.showLoading 還沒閉合時,wx.showToast 就開始顯示了。
- errMsg:?"hideLoading:fail:toast can't be found" 不是 wx.request 請求方法中的 fail 和 complete 發出來的錯誤信息,而是 wx.hideLoading 發出來的錯誤信息。
結合上面的發現,重新改了一次請求接口的封裝過程:
import api from'./api' var host = 'http://127.0.0.1:5500/';//10016:token為空,10008:token無效,20037:集合為空 function request(url, postData) { postData.token = wx.getStorageSync("token");//相當于openidwx.showLoading({ title: '加載中...', mask: true });return new Promise((resolve, reject)=>{ wx.request({//項目的真正接口,通過字符串拼接方式實現url: url,header: { "content-type": "application/json;charset=UTF-8" },data: postData,method: 'POST',dataType: "json",success: function (res) {//參數值為res.data,直接將返回的數據傳入if(res.data.code === "0000"){resolve(res.data); } else {// wx.showToast({ title: res.data.msg, icon: 'none', duration: 2000 });} },fail: function (err) {reject(err)},complete: function(res){wx.hideLoading({complete: function(hide){console.log(hide); //可以看到錯誤信息被打印出來了if(res.data.code === "0000"){} else {wx.showToast({ title: res.data.msg, icon: 'none', duration: 2000 });}}});}})}) }module.exports.post = request;二、module.exports
順便一提上面?module.exports.post = 函數名/變量名 和 module.exports = {} 的區別:
(1)上面我使用的是 module.exports.自定義名稱A = 函數名 這種方法,在調用時,
//引用文件路徑:在Page()的最外層 import 自定義文件名 from '文件地址';//使用:與函數名無關了 自定義文件名.自定義名稱A();module.exports.自定義名稱A = 函數名 中,“自定義名稱A”相當于給函數名重新命名,所以自定義名稱A 經常都是與函數名同名。
(2) module.exports = {?post?} ,這種寫法相當于:module.exports = { post: post },與上面寫法在調用是的區別在于:
import {方法名1, 方法名2} from '文件地址';//使用:直接使用 方法名1();參考:
1.?小程序showLoading:網絡請求前顯示“加載中...”,請求完成時關閉加載中
2.?關于微信小程序VM22:2 (in promise) MiniProgramError {“errMsg“:“hideLoading:fail:toast can‘t be found“
3.?小程序真機調試報錯: errMsg“:“hideLoading:fail:toast can‘t be found“?
總結
以上是生活随笔為你收集整理的小程序 报错errMsg: “hideLoading:fail:toast can‘t be found“ ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 计算对象数组中某个属性值重复出现的
- 下一篇: vue 动态显示三级路由