express-cassandra中saveAsync仅执行两次才生效,如何解决?
问题分析与解决方案
你的代码核心问题是混用了await和回调函数两种异步处理方式,导致saveAsync的执行逻辑异常。
错误原因
express-cassandra的saveAsync方法有两种使用模式:
- 当传入回调函数时,它采用传统回调式异步流程,不会返回Promise,此时
await完全不起作用——代码会直接跳过等待,继续执行后续逻辑,而保存操作可能还在后台未完成,所以看起来第一次调用没生效。 - 第二次调用时,可能第一次的异步操作刚好延迟完成,或是第二次调用触发了正确的保存流程,才让数据成功写入。
正确写法二选一
写法1:使用await + try/catch(推荐,符合现代异步编程风格)
去掉回调函数,直接用await等待Promise完成,通过try/catch捕获错误:
try { await user.saveAsync(); } catch (err) { console.error("Error saving newRecord:", err.message); reject(err); // 若在Promise内部,直接抛出或reject即可 }
写法2:仅使用回调函数
如果坚持用回调,就不要加await,确保异步逻辑在回调内处理:
user.saveAsync((err) => { if (err) { console.error("Error saving newRecord:", err.message); reject(err); return; } // 保存成功后的后续逻辑写在这里 });
内容的提问来源于stack exchange,提问作者Diganta Kr Banik
相关产品推荐
相关产品推荐

