使用Twilio API时无法将响应赋值给result对象,求解决方案
问题根源:异步操作的执行顺序错误
你遇到的核心问题是异步代码的执行时机不对:
- Twilio的
fetch()方法是异步Promise操作,它不会阻塞后续代码运行 - 你在调用
fetch()后立刻执行console.log(result)和res.json(),这时候Promise还没完成,result还是初始的undefined,所以返回的响应里Data是空的 - 哪怕把
then回调改成phone_number => result = phone_number也没用——因为响应已经提前发送了,异步完成后再给result赋值,无法修改已经发出去的响应
两种解决方案
方案一:用async/await(推荐,代码更简洁)
你的路由函数已经标记了async,直接用await等待Promise完成:
apiRoutes.get('/callerid/:number', async (req, res) => { try { const result = await client.lookups.v1.phoneNumbers(req.params.number) .fetch({type: ['carrier', 'caller-name']}); console.log(result); res.json({ Success: true , Data: result }); } catch (err) { // 别忘了处理错误,避免服务器崩溃 res.json({ Success: false, Error: err.message }); } })
方案二:在then回调内处理响应
如果不想用await,就把发送响应的逻辑放在then里面,确保异步完成后再返回结果:
apiRoutes.get('/callerid/:number', (req, res) => { client.lookups.v1.phoneNumbers(req.params.number) .fetch({type: ['carrier', 'caller-name']}) .then(phone_number => { console.log(phone_number); res.json({ Success: true , Data: phone_number }); }) .catch(err => { res.json({ Success: false, Error: err.message }); }); })
内容的提问来源于stack exchange,提问作者MisterniceGuy
相关产品推荐
相关产品推荐

