本文详解 node.js 中使用 contentful sdk 时因混用回调与 promise 导致的请求挂起问题,提供正确使用 `await` + `try/catch` 的标准写法,并附完整可运行示例。
在 Node.js 后端集成 Contentful CMS 时,一个常见却隐蔽的问题是:API 接口长时间无响应(浏览器转圈)、控制台无报错、Postman 却能正常返回数据。这通常并非网络或认证问题,而是 SDK 调用方式不匹配引发的异步逻辑阻塞。
Contentful JavaScript SDK 的 client.getEntries() 方法返回的是 Promise 对象,而非立即执行的同步函数。原代码中同时使用了回调函数(第 2 个参数)和 .catch(),属于典型的「Promise 与回调混用」反模式:
// ❌ 错误示范:混用回调与 Promise 链
client.getEntries({ ... }, (err, courses) => { ... }).catch(...)
该写法会导致:
- 回调函数被忽略(SDK 在 Promise 模式下不触发回调);
- Promise 未被 await 或 .then() 显式消费,Node.js 事件循环无法推进;
- 请求永久挂起,无响应、无错误——因为异常未被捕获,也未终止响应流。
✅ 正确做法是统一使用 async/await 语法,并配合 try/catch 处理异常: