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对内存的影响是什么?怎样影响的?

阅读 3.1k
3 个回答

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进