Node.js Promise resolve
在使用await async的时候,定义一个async函数:
async updateUserInfo(objectId, username, mobilePhoneNumber, appId){
let replaceSql = `update xc_scm_leancloud_users set username="${username}",mobilePhoneNumber="${mobilePhoneNumber}" where objectId="${objectId}" and appId="${appId}"`;
scmSequelize.query(replaceSql);
}
调用:
updateUserInfo(objectId, username, mobilePhoneNumber, appId)
.catch(err => {
logger.error('leancloudUser afterUpdate err: ', err);
res.send(new XCResult(false, new XCError('', XC_BIZ_ERROR_TYPE.BIZ_ERROR,err)));
return next();
});
在updateUserInfo()中没有返回值的时候,整个服务器的内存占用为90M左右,在updateUserInfo()中加上返回值:
async updateUserInfo(objectId, username, mobilePhoneNumber, appId){
let replaceSql = `update xc_scm_leancloud_users set username="${username}",mobilePhoneNumber="${mobilePhoneNumber}" where objectId="${objectId}" and appId="${appId}"`;
return scmSequelize.query(replaceSql);
}
服务器的内存占用为140M+,这是怎样产生的?我想问一下promise的resolve和reject对内存的影响是什么?怎样影响的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
感觉是你异步函数里面的占用
promise用栈维护的,只要不是链的太长,或太多,promise不太会有影响的
关键要看你返回到哪里去了,是丢掉了还是存起来了。没有返回查出结果直接就丢掉了,如果返回并保存起来了,内存占用当然要大一些。
我的理解是,虽然
scmSequelize.query
是什么并不清楚,但肯定是一个function
,return
一个scmSequelize对象的方法里面可能包含了很多诸如this.xx之类的引用,当执行updateUserInfo
这个异步方法时,就形成了闭包(在callback的作用域使用scmSequelize作用域下的属性)以致于引用没有释放。但是并没有办法解释你加了return
就突然一直多了50M
这件事情。