Node.js Promise resolve

发布于 2022-09-06 21:22:23 字数 1023 浏览 29 评论 0

在使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜`诱少女 2022-09-13 21:22:23

感觉是你异步函数里面的占用
promise用栈维护的,只要不是链的太长,或太多,promise不太会有影响的

浅笑轻吟梦一曲 2022-09-13 21:22:23

关键要看你返回到哪里去了,是丢掉了还是存起来了。没有返回查出结果直接就丢掉了,如果返回并保存起来了,内存占用当然要大一些。

寄居人 2022-09-13 21:22:23

我的理解是,虽然scmSequelize.query是什么并不清楚,但肯定是一个functionreturn一个scmSequelize对象的方法里面可能包含了很多诸如this.xx之类的引用,当执行updateUserInfo这个异步方法时,就形成了闭包(在callback的作用域使用scmSequelize作用域下的属性)以致于引用没有释放。但是并没有办法解释你加了return就突然一直多了50M这件事情。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文