异步调用的update函数改为同步,循环后统一返回结果

mongodb批量修改数据,其实有内部方法,db.[collectionName].update({查询器},{修改器}),不是这里讨论的重点。

今天要讨论的是,异步调用的update函数改为同步,逐条更新后统一返回结果。

因为update方法是异步函数,所以要用点技巧来编写。

首先明白异步转同步大概有两种方法:async/await和then。

平常使用时两个方法都可以,但是使用async.auto,各函数串行调用时,特别是带有for循环的调用中,建议使用async/await。

function updateData (tablename, querywhere, dataset) {
	return new Promise((resolve) => {                                    				  
		mongodb.update(tablename, querywhere, dataset, function (err, queryresult) {
			resolve({err: err, rets: queryresult})                                  
		})                                
	})
}

再通过上层封装

async function forUpdate () {                                
	let j = 1                               
	let arr = []                                
	for (let i = 0; i < len; i++) {                                    
	if (list[i]) {                                      
		const querywhere = {id: list[i].id}                                        
		const dataset = {$set: {                                            
			"time1": list[i].time1 * 1000,
			"time2": list[i].time2 * 1000                                        
		}};                                            
		const d = await updateData('tablename', querywhere, dataset)                                                                                
		if (d.err == null) {                                            
			arr.push({successful: true, failreason: "OK"})                                        
		} else {
			arr.push({successful: false, failreason: 'update error[1]'})                                        		}
	} else {
		arr.push({successful: false, failreason: 'update error[0]'})                                    	}
	}
	return arr
}

const rets = await forUpdate () 
console.log(rets)

这样就能成功将异步调用的update函数改为同步,循环后统一返回结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lcwai

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值