收藏
回答

求问,怎么才能先执行app.js,执行完了,才执行page里的js呢

我想在app.js里用接口获取一个参数,用到page里面,显示在页面上,但是每次页面加载完了,app.js才获取到参数,这怎么办呢??


页面onLoad时,数据接口还没执行完,没有数据,获取不到

回答关注问题邀请回答
收藏

11 个回答

  • 云
    2018-08-31

    没必要用定时器,可以加一个回调函数

    例如:

    if (app.xxx) {//判断有没有你要的 没有说明还没返回或者是失败了
          //操作略
        } else //这个是时候我们在app的config里定义一个函数 给请求成功后调用
          app.callback = () => {
           //操作略   这个和上面的操作是一样的
          };
        }

    app请求返回成功里这样写

    if (this.callback) {  //这个函数名字和你定义的一样即可
       this.callback() //执行定义的回调函数
    }

    希望你能够看明白,

    2018-08-31
    有用 4
    回复 11
    • 陈
      2018-08-31

      那你知道你这样写,直到app.js执行完成你写的会执行多少次吗

      2018-08-31
      回复
    • 云
      2018-08-31回复

      一次啊

      2018-08-31
      回复
    • 陈
      2018-08-31回复

      那我要是长时间没有执行完成呢,如果你还是执行一次那就比我的方法好,你是验证过可以吗?

      2018-08-31
      回复
    • 云
      2018-08-31

      如果你是进入page前完成了 ,你在page里也不会设置这个回调,如果你已经进入了page,发现异步还没有完成就设置这个回调,让异步完成后执行

      2018-08-31
      回复
    • .
      .
      2018-08-31回复

      1、wxml


      2、wxss



      3、显示效果,想问下为啥  搜索的 icon  出不来呢? 还望多多指教

      2018-08-31
      回复
    查看更多(6)
  • 彬💤
    彬💤
    2018-08-31

    为什么会有人说定时器这种蠢方法

    不是没必要  而是不能用  不单影响性能  处理不好更有内存泄露

    es6的Promise不好用么  再不行就是订阅者不可以么


    2018-08-31
    有用 3
    回复 2
    • 冷冷
      冷冷
      2019-04-03

      那比如说我的appjs里面是需要做多种判断后才能取得最后的值,比如说a存在那我的值为a,a不存在调接口b,b的返回值再来判断最终取值c或者d,这样的如何用promise呀

      2019-04-03
      回复
    • 彬💤
      彬💤
      2019-04-03

      所有的内部逻辑不需要管  反正只要为所有的判断最终路线后返回一个Promise就行


      无论你判断多深多复杂  只需这个方法最终返回的一定是个Promise就行了

      页面上直接等待这个Promise完成  页面不需要知道你内部做了几万个判断

      2019-04-03
      回复
  • 2018-08-31

    包成promise,把这个promise放在全局变量里,在page里使用这个promise

    2018-08-31
    有用 1
    回复
  • 2018-08-31

    接口promise化,用async/await才是这个问题的有效解决办法吧

    为什么还要用这种代码去解决

    2018-08-31
    有用 1
    回复
  • NickName
    NickName
    2018-08-30

    多谢,完美解决



    2018-08-30
    有用 1
    回复 3
    • 米儿
      米儿
      2018-08-30

      没必要用setinerval,可能会引起各种未知问题,弄一个回调函数

      2018-08-30
      回复
    • 🍯🧊
      🍯🧊
      2018-08-31

      我用的定时为什么会报参数未定义?是在page的js里面写嘛?用回调函数怎么写?

      2018-08-31
      回复
    • 云
      2018-08-31回复🍯🧊

      兄弟 用回调可以参照我回答的那个例子

      2018-08-31
      回复
  • 陈
    2018-08-30

    用定时器来循环判断,直到值被改变了才开始加载page

    2018-08-30
    有用 1
    回复 37
    • 卢霄霄
      卢霄霄
      2018-08-30

      怎么加了个先生。。有人喊你陈妹子吗。。。

      2018-08-30
      1
      回复
    • 陈
      2018-08-30回复卢霄霄

      你不说还好,你一说我都感觉怪怪的

      2018-08-30
      1
      回复
    • 卢霄霄
      卢霄霄
      2018-08-30回复

      啧。。陈妹子你好。。

      2018-08-30
      1
      回复
    • 陈
      2018-08-30回复卢霄霄

      .......我很想让你见识一下红色的感叹号

      2018-08-30
      1
      回复
    • 卢霄霄
      卢霄霄
      2018-08-30回复

      高跟鞋的脚印吗

      2018-08-30
      1
      回复
    查看更多(32)
  • 追小命
    追小命
    2018-09-01

    这种问题一般都是需要一些app开始时候从网络请求的数据来更新页面内容,但页面渲染提前了。可以专门约定一个每个page都有的page.render()函数来渲染页面,如果发现需要的数据还没有ready干脆什么都不做,由app.onLoad在网络请求成功之后直接getCurrentPages,调用page.render就完事了。

    2018-09-01
    有用
    回复
  • 神经蛙
    神经蛙
    2018-08-31

    优雅点的做法是用事件订阅,自己搞个EventBus,类似的方案很多。

    2018-08-31
    有用
    回复
  • 海
    2018-08-31

    小程序的新建范例里面就有回调函数的用法:

    onLoad: function () {
       console.log('index page on load log:' + Date());
       if (app.globalData.userInfo) {
         this.setData({
           userInfo: app.globalData.userInfo,
           hasUserInfo: true
         })
       } else if (this.data.canIUse){
         // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
         // 所以此处加入 callback 以防止这种情况
         app.userInfoReadyCallback = res => {
           this.setData({
             userInfo: res.userInfo,
             hasUserInfo: true
           })
         }

    //不过我还不明白app.userInfoReadyCallback这个值是从哪来的?

    2018-08-31
    有用
    回复 1
    • 伟
      2020-03-01
      在page里面定义的呀 app=getApp(); app.callback = ()=>{}
      2020-03-01
      回复
  • #.o0OfF ~ lbb
    #.o0OfF ~ lbb
    2018-08-31

    promise、eventbus都可以解决

    2018-08-31
    有用
    回复

正在加载...

登录 后发表内容