精华内容
下载资源
问答
  • 微信小程序 异步转同步,promise,for循环加request异步解决方案
    千次阅读
    2019-09-06 16:02:59

    问题:在使用for循环的同时,在内部使用wx.request发送get或者post请求,会导致异步请求存储数据。由于我对微信小程序的应用不是很熟练,并且微信小程序并不像vue那么好使。所以使用异步转同步的方式解决问题。
    方案:
    1,创建两个数组,这里分别是 user 和userHead

      data: {
        hotData: [],
        userHead: [],
        user: []
      },
    

    2,在methods中创建两个方法getRoomList和getUserHead
    其中getRoomList是请求第一组数据,该数据是异步一次性获取,而getUserHead是在getRoomList请求完成之后触发函数调用。

    getRoomlist() {
          wx.request({
            url: 'http://127.0.0.1:3000/x/web-interface/ranking',
            data: {
              rid: 119,
              day: 3
            },
            method: 'GET',
            success: (res) => {
              wx.stopPullDownRefresh();
              console.log(res);
              this.setData({
                hotData: res.data.data.list,
              });
              console.log(this.data.hotData)
              this.getUserHead();
            }
          });
        },
        getUserHead() {
          // 获取用户头像  使用异步转同步的方法
          for (let i = 0; i < this.data.hotData.length; i++) {
            let s = new Promise((resolve, reject) => {
              wx.request({
                url: 'http://127.0.0.1:3000/x/web-interface/userid',
                method: 'GET',
                data: {
                  uid: this.data.hotData[i].mid
                },
                method: 'GET',
                success(res) {
                  resolve(res.data.data.card.face)
                },
                fail(err) {
                  reject(err)
                }
              })
            });
            this.data.userHead.push(s);
            this.setData({
              userHead: this.data.userHead,
            });
          };
          this.data.user.length = this.data.userHead.length;
          for (let j = 0; j < this.data.userHead.length;j++){
            this.data.userHead[j].then(v=>{
              this.data.user[j] = v;
              this.setData({
                user: this.data.user,
              });
            })
          }
        }
    

    3,getUserHead方法,将异步获取的数据转化为同步获取,这样数据的index值所对应的数据不会出错

    第一步:通过for循环和wx.request获取数据**(此时已经出错,我发现请求的数据的index与原来的数据index值不匹配)**,

    第二步:解决不匹配问题,上网查询得知使用promise

    for (let i = 0; i < this.data.hotData.length; i++) {
            let s = new Promise((resolve, reject) => {
              wx.request({
                url: 'http://127.0.0.1:3000/x/web-interface/userid',
                method: 'GET',
                data: {
                  uid: this.data.hotData[i].mid
                },
                method: 'GET',
                success(res) {
                  resolve(res.data.data.card.face)
                },
                fail(err) {
                  reject(err)
                }
              })
            });
        }
    

    通过在控制台打印可以看出s是一个promise类型的数据,通过网上搜索得知,promise类型内的数据并不能直接获取,必须通过then()才可以拿到数据。于是我将所有同步获取的数据存入userHead数组内。

    for (let i = 0; i < this.data.hotData.length; i++) {
            let s = new Promise((resolve, reject) => {
              wx.request({
                url: 'http://127.0.0.1:3000/x/web-interface/userid',
                method: 'GET',
                data: {
                  uid: this.data.hotData[i].mid
                },
                method: 'GET',
                success(res) {
                  resolve(res.data.data.card.face)
                },
                fail(err) {
                  reject(err)
                }
              })
            });
            this.data.userHead.push(s);
            this.setData({
              userHead: this.data.userHead,
            });
          };
    

    this.data.userHead.push(s);
    this.setData({
    userHead: this.data.userHead,
    });

    存入之后发现无法直接调用,尝试之后,利用for循环加then()方法来解析

    this.data.user.length = this.data.userHead.length;
          for (let j = 0; j < this.data.userHead.length;j++){
            this.data.userHead[j].then(v=>{
              this.data.user[j] = v;
              this.setData({
                user: this.data.user,
              });
            })
          }
    

    之后就可以拿到同步的数据了。

    更多相关内容
  • 小程序 for循环事件只执行一次

    千次阅读 2020-06-02 14:56:10
    相信很大开发者都遇到过这种情况,for循环里面添加一个事件,点击事件通过变量更改样式或者显示某一元素,比如: 当我们点击改变state值的时候,所有的元素都会一起改变,但是我们要的只是点击当前的元素,当前的...

    前言:
    相信很大开发者都遇到过这种情况,for循环里面添加一个事件,点击事件通过变量更改样式或者显示某一元素,比如:
    当我们点击改变state值的时候,所有的元素都会一起改变,但是我们要的只是点击当前的元素,当前的state改变,这个时候,就不能直接定义一个变量去改变它的状态了

    <view a:for="{{list}}">
    <!-- 这个state是在js里面的变量,state等于1执行class名为box,不等于1执行class名为boxData -->
       <view class="{{ state == '1' ? 'box':'boxData' }}" onTap="handleClick">
         {{item}}
       </view>
    </view>
    
     正确方法如下:
      使用list数组里面的属性去控制,点击当前,拿到当前的index,去改变它的状态
    
    html:
    <view a:for="{{list}}">
    <!-- 这个state是在js里面的变量,state等于1执行class名为box,不等于1执行class名为boxData -->
       <view class="{{ item.state == '1' ? 'box':'boxData' }}" onTap="handleClick" data-index="{{index}}" data-state="{{item.state}}">
         {{item}}
       </view>
    </view>
    

    js:

    Page({
      // 页面的初始数据
      data: {
        list: [
          {
            "id": 1139427,
            "fundCode": "502023",
            "fundName": "鹏华钢铁",
            "state": 1,
          },
          {
            "id": 1139427,
            "fundCode": "502023",
            "fundName": "鹏华钢铁",
            "state": 2,
          }, {
            "id": 1139427,
            "fundCode": "502023",
            "fundName": "鹏华钢铁",
            "state": 1,
          },
        ]
      },
      handleClick: function (e) {
        var index = e.currentTarget.dataset.index;//拿到下标
        var state = e.currentTarget.dataset.state;//拿到订阅状态的state
        let listArr = this.data.list;//列表数据
        var str = state == '1' ? '2' : '1';
        listArr[index].state = str;
      }
    })
    

    以上方法即可实现for循环出来的事件,点击更改当前的样式。有更好的方法,欢迎大家留言交流~
    本文章为原创,转发请注明出处,谢谢!

    展开全文
  • for循环不执行

    千次阅读 2018-10-21 18:54:57
    我遍历的时候这一段代码老是运行,我仔细想了想,因为项目的一些初始数组,像商品列表,好友列表,都是空的,如果数组为空的话,那么for循环就无法执行了,那么我们就不要让他为空,所以在他之前先判断一下,数组...

    最近在做小项目的时候,遇到这么一个小坑,上代码;
    for循环小坑
    这个for循环的意思是:如果后台传的数组中某一个对象的某一个键值对和前端页面上的对象的键值对一致的话,我们就把数组中这个对象替换成前端页面的这一个对象。我遍历的时候这一段代码老是不运行,我仔细想了想,因为项目的一些初始数组,像商品列表,好友列表,都是空的,如果数组为空的话,那么for循环就无法执行了,那么我们就不要让他为空,所以在他之前先判断一下,数组长度是不是为0,或者说数组是不是为空,如果数组为空,我们先给他push一个元素就可以解决了。

    展开全文
  • 包括H5里面循环嵌套ajax请求,axios请求都会出现异步执行的问题 解决的核心思想就是递归调用 问题描述 直接上代码: for(var i = 0;i < Array_Id.length;i ++){ db.collection('Statistics_Info').doc(Array_Id...

    这是个老问题了
    包括H5里面循环嵌套ajax请求,axios请求都会出现异步执行的问题

    解决的核心思想就是递归调用

    问题描述

    直接上代码:

        for(var i = 0;i < Array_Id.length;i ++){
          db.collection('Statistics_Info').doc(Array_Id[i]).get({
            success(res){
              console.log(i)
            }
          })
        }
    

    乍一看这段程序会认为输出0,1,2
    事实是
    在这里插入图片描述
    连续三个3,意思就是说我for循环都执行完了,这个success函数才被调用

    如何解决?当然是递归了,你success不执行成功就不进入下一趟循环

    代码如下:

        function getId(i){
          if(i == Array_Id.length) return;
          db.collection('Statistics_Info').doc(Array_Id[i]).get({
            success(res) {
              console.log(i)
              getId(i+1)
            }
          })
        }
        getId(0)
    

    有点算法基础的同学应该都很好理解吧?
    最后执行结果
    在这里插入图片描述

    该方法在循环发送ajax、axios请求中同样适用

    展开全文
  • 作为一名准研究生,已经提前在学校干活了…导师最近让我做一个垃圾分类+图像识别的小程序,由于之前从未接触过小程序与后端的开发,所以写一些博客来记录一下开发过程中遇到的坑 问题描述 作为一个垃圾分类的小程序...
  • 小程序-for循环遍历的使用

    千次阅读 2018-12-07 11:24:00
    :关于wx:for的使用,相信用过angular.js和vue.js等框架的伙伴们一眼就可以看出来了,没错,它们的用法其实是一样的,这里我们需要注意的是wx:key的使用 1、wx:key="字符串" 这个”字符串”代表在 for 循环的 ...
  • 微信小程序for循环调用云函数从数据库中获取对应数据,由于云函数调用是异步的(在js中的for循环内部还可以顺序执行,在云函数中调用云函数就必须await了),for循环的云函数调用还没执行完就执行for循环之后的内容 ...
  • 需求:让用户感受到动态加载上图中的for (var i = 0; i < spanNum; i++) { var color_i = "span[" + i +"].color"; console.log(color_i); this.sleep(100); //实现延时 that.setData({ ...
  • 之前写过一个小程序遇到一次,控制台没有报错,当时我找了好久,我最后实在没办法用了一个最傻的办法来测试,在每个代码节点上加console.log()打印到哪个哪个节点了,随后真的就到了for循环那停下来了
  • 在做项目中发现在对for循环出来的button,添加点击事件的时候,所有button都会生效,那怎么实现只对当前的button有效呢?看下我实现的思路吧。有明白的可以留言哈 wxml: &amp;amp;amp;amp;lt;view wx:for=&...
  • 微信小程序-页面FOR循环和嵌套循环

    万次阅读 2017-06-16 11:31:24
    单个循环 <view wx:for="{{pinpaiTishi}}" wx:key="{{xxx}}"> <view wx:if="{{item.name!=null}}" wx:key="{{xxxx}}"> //判断name是否为null <view ...
  • 请求接口,获得一个对象数组,将res.data里的数据push到result数组里有四种状态,根据状态type不同来判断需要显示的数据,但是我将if判断写在了for..in里就会出现数据不循环的情况,所有我用了forEach()的方法,...
  • 详解微信小程序循环及嵌套循环

    千次阅读 2020-12-31 05:22:23
    本文主要介绍微信小程序 循环及嵌套循环的使用总结的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下,希望能帮助到大家。对于我们在js中从接口中通过POST或GET请求获取数据存放到Page中定义的对象中://...
  • 大家一定经历过这种需求, 把一个数组(暂且称之为list)的长度作为循环条件,循环过程中做一些判断,然后删除掉list中的某一项,或者多项。如以下代码:let list = that.data.list; for(let i = 0 ; i &lt; ...
  • 最近公司有小程序的项目,本人有幸参与其中,一个项目做下来感觉受益匪浅,与大家做下分享,欢迎沟通交流互相学习。 先说一下此次项目本人体会较深的几个关键点:微信地图、用户静默授权、用户弹窗授权、微信...
  • //循环执行代码 }, 1000) //循环时间 这里是1秒 满足条件 结束循环   var a = setInterval(function () { //循环执行代码 if(结束条件) { clearInterval(a) } }, 1000) //循环时间 这...
  • 程序是输出100以内所有高位数学比地位数字的两位数![图片](https://img-ask.csdn.net/upload/201610/14/1476452500_346923.png)
  • for循环嵌套,C语言for循环嵌套详解

    千次阅读 多人点赞 2021-02-06 16:50:51
    虽说是多层,事实上 for 循环嵌套的层数也能太多。通常为两个 for 循环的嵌套,超过两个的极少使用。与单个 for 循环相比,多个 for 循环的嵌套在逻辑上更复杂一点,但并难懂。直接给大家写一个程序:# include ...
  • 微信小程序:wx:if="{{index&lt;5}}" &lt;view wx:for="{{dataArray}}" wx:key="index" wx:for-item="item" wx:if="{{index&lt;5}}"&gt;&...
  • 在开发小程序中需要做一个用户评论上传图片的功能,首先考虑到微信的wx.uploadFile接口只能一次上传一张,而功能需求是需要单张或者多张上传,最常用的方法是用for循环去上传 这样: //上传图片,这里使用了vant...
  • 实验室经常需要使用到matlab,for循环非常慢,自己找了一些matlab中for循环的优化方法,for的部分每处理一个大矩阵都要花费大量的时间,这是可避免需要遇到的问题~。方法1:循环多要紧,要紧的是循环嵌套得太多...
  • 今天有个功能,根据后台给的数据来判断要给多少颗星,但是之前都是循环的对象类型,我要怎么根据一个数字来做循环呢?请看::::::::给大家分享一下。(如果有更好的方法记得……你懂得。)这个是满心的(最多...
  • c++ for循环执行流程

    千次阅读 2020-03-17 11:37:19
    c++中的for循环是一种很基本,而且...for循环允许您编写一个执行特定次数的循环的重复控制结构。 语法 C++ 中for循环的语法: for ( init; condition; increment ) { statement(s); } 下面是 for 循环的控制流...
  • 多重for循环嵌套中语句的执行次数

    千次阅读 2019-08-11 20:13:23
    实例代码 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { ...以上代码中,求count++语句的执行次数。 其实这段代码中求count++...
  • c语言for循环如何使用

    千次阅读 2021-05-19 12:05:37
    下面编就和大家探讨一下for循环如何使用!c语言for循环for语句是循环控制结构中使用最广泛的一种循环控制语句,特别适合已知循环次数的情况。一般形式如下:for ( [表达式 1]; [表达式 2 ]; [表达式3] )语句其中:...
  • 微信小程序动态循环渲染

    千次阅读 2019-05-31 17:28:15
    最近在小程序开发遇到一个问题 当我进行request请求的时候 如果参数是动态 那我得写个for循环把参数循环出来进行request请求 比如这样 for (let i = 0; i < data.length; i++) { wx.request({ url: ''+'/'+...
  • wx:for循环实现自动换行: wxss文件内flex-wrap: wrap;wx:for 循环的内容<view class="menu_item" wx:for="{{menus}}" wx:for-index="idx" wx:for-item="menus" wx:key="menus"> ...
  • 文章目录什么时候执行else,什么时候不执行else语句for...else...正确代码示例和说明for循环搭配else常见错误和陷阱 在Python中,有while和for两种循环,并且都可以带有else子句,都有什么区别呢? 其中while循环...
  • 小程序canvas循环绘制内容的问题

    千次阅读 2019-04-23 22:18:21
    这里有一个问题就是canvas绘制文字的速度比绘制图片的速度快很多,一个for循环之后,for循环中的文字绘制已经执行完了但是,for循环中的图片还没有绘制好,就已经执行for循环外面的context.draw()方法绘制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 464,335
精华内容 185,734
热门标签
关键字:

小程序for循环不执行