小程序云开发,小程序端使用for循环,循环内调用云函数,结果出错的解决方案

本文讲述了在微信小程序中,由于云函数的异步性质导致在for循环中无法正确更新评论对象数组中comment_calculatedTime的解决方案。作者通过将循环逻辑移到云函数内部,批量处理整个comments数组,实现了所需功能。这种方法提醒开发者可以利用云函数来处理小程序端难以解决的异步问题。
摘要由CSDN通过智能技术生成

1.先讲一下自己的需求:

我定义了一个对象数组:

//xiangqing.js
data:{
   
	//评论者的信息
    comments:[
      {
    
        comment_UserImgUrl:"",  
        comment_NickName:"",   
        comment_time:"",      //评论的时刻,字符串化,如:‘2020/03/16 下午13:01’
        comment_time_date:new Date(),  //评论的时刻 date类型变量
        comment_calculatedTime:"",  //评论的距今时间 如: ‘...分钟/小时/天前’
        comment_content:""
      }
    ],
}

comments数组的赋值:

//xiangqing.js
onLoad: function (options) {
   
    let that=this
    that.setData({
   
      _id:options._id,  //接受上一个页面传递过来的参数_id
    })
    wx.cloud.init({
   
      env:'test'
    })
    //查询ForumPost集合中指定_id的记录,
    //并将记录中comments字段赋值给this.data.comments
    const db=wx.cloud.database()
    db.collection("ForumPost").doc(that.data._id).get({
   
      success:function(res){
   
        that.setData({
   
          comments:res.data.comments //对象数组可以整体赋值
        })
      }
   })
}

现在要更新this.data.comments数组中每个对象的comment_calculatedTime,它是用户打开该帖子的时间戳和该帖子发表的时间戳的差。我定义了一个云函数实现,传递参数为comment_time_date(帖子的发表时刻):

//HandlePublishTime_2.js
//HandlePublishTime_2传过来的参数为postTime_date,即单个date类型的变量  
//返回的result.calculatedTime是date变量值的距今时间
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值