CMS小程序里request貌似没有考虑异步操作问题。红包求改善。

woo2000 1月前 263

CMS里带的小程序代码里 request方法可能是没有考虑异步操作问题,会导致一些异常。

求比如经过promise改善过的request方法代码。完美代码有红包。。。聊表心意

就是app.js里的:

`

//发起网络请求

  request: function(url, data, success, error) {
        var that = this;
        if (typeof data == 'function') {
              success = data;
              error = success;
              data = {};
        }
        if (this.globalData.userInfo) {
              data['user_id'] = this.globalData.userInfo.id;
              data['token'] = this.globalData.userInfo.token;
        }
        //移除最前的/
        while (url.charAt(0) === '/')
              url = url.slice(1);
        this.loading(true);
        wx.request({
              url: this.apiUrl + url,
              data: data,
              method: 'post',
              header: {
                    "Content-Type": "application/x-www-form-urlencoded"
              },
              success: function(res) {
                    that.loading(false);
                    var code, msg, json;
                    if (res.statusCode === 200) {
                          json = res.data;
                          if (json.code === 1) {
                                typeof success === 'function' && success(json.data, json);
                          } else {
                                typeof error === 'function' && error(json.data, json);
                          }
                    } else {
                          json = typeof res.data === 'object' ? res.data : {
                                code: 0,
                                msg: '发生一个未知错误',
                                data: null
                          };
                          typeof error === 'function' && error(json.data, json);
                    }
              },
              fail: function(res) {
                    that.loading(false);
                    console.log("fail:", res);
                    typeof error === 'function' && error(null, {
                          code: 0,
                          msg: '',
                          data: null
                    });
              }
        });
  },
最后于 1月前 被woo2000编辑
最佳回复
  • 君君要上天 1月前
    woo2000 我也不是很懂,就是发现,request请求还没任何结果的时候,代码就往下执行了。百度了一下,确实有这类问题。通常是用promise解决,但是我不懂程序语法,以前在thinkCMF上弄过,不过在fasr ...

    这根本不是问题,是你不会用。image.png
    此处success传一个function进去,在function里面执行代码就会在请求完成之后执行。。我怀疑你连ajax都不知道。

最新回复 (13)
  • 君君要上天 1月前
    感谢TA
    0 引用 2

    导致什么异常?

  • woo2000 楼主 1月前
    感谢TA
    0 引用 3

    比如,文字或图片信息还没获取到,就去渲染页面了。再或者,还没取回该用户是否发布过信息,就去显示该用户发布信息的条数了。

  • 君君要上天 1月前
    感谢TA
    0 引用 4
    woo2000 比如,文字或图片信息还没获取到,就去渲染页面了。再或者,还没取回该用户是否发布过信息,就去显示该用户发布信息的条数了。

    这简单啊。在请求之前先把页面隐藏起来,请求成功之后渲染页面并且把页面显示出来不就好了。

  • woo2000 楼主 1月前
    感谢TA
    0 引用 5
    君君要上天 这简单啊。在请求之前先把页面隐藏起来,请求成功之后渲染页面并且把页面显示出来不就好了。

    如何在请求成功之前“隐藏”页面? 也就是如何阻止代码往下执行?
    这个还不光是显示的问题,很多逻辑判断,都遇到了问题。比如如果用户发布过信息,就修改(edit),没发布过,就发布(add)。那先要判断是否发布过,是否发布过这个请求还没返回结果,代码就往下执行去判断发布还是修改,但是此时判断依据还没产生呢。(后端远程服务器比较慢的情况)

  • 君君要上天 1月前
    感谢TA
    0 引用 6
    woo2000 如何在请求成功之前“隐藏”页面? 也就是如何阻止代码往下执行? 这个还不光是显示的问题,很多逻辑判断,都遇到了问题。比如如果用户发布过信息,就修改(edit),没发布过,就发布(add)。那先要判断 ...

    request请求有成功和失败回调啊,你把代码逻辑放在回调里执行不就可以了。

  • woo2000 楼主 1月前
    感谢TA
    0 引用 7
    君君要上天 request请求有成功和失败回调啊,你把代码逻辑放在回调里执行不就可以了。

    我也不是很懂,就是发现,request请求还没任何结果的时候,代码就往下执行了。百度了一下,确实有这类问题。通常是用promise解决,但是我不懂程序语法,以前在thinkCMF上弄过,不过在fasradmin的代码风格里,照葫芦画瓢卡住了。

  • 君君要上天 最佳回复 1月前
    感谢TA
    0 引用 8
    woo2000 我也不是很懂,就是发现,request请求还没任何结果的时候,代码就往下执行了。百度了一下,确实有这类问题。通常是用promise解决,但是我不懂程序语法,以前在thinkCMF上弄过,不过在fasr ...

    这根本不是问题,是你不会用。image.png
    此处success传一个function进去,在function里面执行代码就会在请求完成之后执行。。我怀疑你连ajax都不知道。

  • woo2000 楼主 1月前
    感谢TA
    0 引用 9

    那我也不能把后面所有的代码都写在success里吧?

    我不是程序员,思维也不属于理性的,不习惯抽象的东西,比如面向对象的编程就不行。ajax10年前接触过,不过也是抄代码,修改。我现在也是这样。10年前的东西,我现在也还是不会。只会分析,修改。

  • F4NNIU 打赏 1月前
    感谢TA
    0 引用 10
    woo2000 那我也不能把后面所有的代码都写在success里吧? 我不是程序员,思维也不属于理性的,不习惯抽象的东西,比如面向对象的编程就不行。ajax10年前接触过,不过也是抄代码,修改。我现在也是这样。 ...

    你这是给自己的思想加了一个上限。grin

  • F4NNIU 打赏 1月前
    感谢TA
    0 引用 11

    大神总是那么谦虚的。

  • woo2000 楼主 1月前
    感谢TA
    0 引用 12
    F4NNIU 你这是给自己的思想加了一个上限。:grin:

    意思是,,,,真的可以把以后所有的东西,都写在success里? 再后面的代码写在后来的request里的success里?如此嵌套?

  • woo2000 楼主 1月前
    感谢TA
    0 引用 13
    F4NNIU 你这是给自己的思想加了一个上限。:grin:

    1535073135431.jpg

  • woo2000 楼主 1月前
    感谢TA
    0 引用 14
    君君要上天 这根本不是问题,是你不会用。![image.png](//cdn.forum.fastadmin.net/uploads/201808/23/5c2570ef005f669bcda470540e5a6 ...

    在你和F4NNIU 的教导下,有点想通了。虽然这样有嵌套的麻烦,但是实际上又能嵌套几层呢。也就2-3层,还是可以解决眼前问题的。

    谢谢了哈。。。。

  • 未登录
    15
返回