request-promise中请求何时发送?调用rp还是执行Promise时?
关于request/request-promise请求发送时机的解答
嘿,咱们来把这个问题说透——你问的request(以及request-promise)请求到底什么时候发送,答案很明确:不是在调用rp(...)返回Promise的那一刻立即发送,而是要等当前同步代码执行完毕,事件循环轮到这个任务时才会发起请求。
我特意做了测试验证这个逻辑,举个直观的代码例子你就能明白:
const rp = require('request-promise'); console.log('进入同步代码执行阶段'); const requestPromise = rp('https://example.com'); console.log('已经拿到Promise对象,但此时请求还没发出去'); requestPromise.then(() => console.log('请求响应成功返回')); console.log('同步代码全部执行完,现在事件循环会处理异步任务');
运行这段代码后,控制台的输出顺序是:
- 进入同步代码执行阶段
- 已经拿到Promise对象,但此时请求还没发出去
- 同步代码全部执行完,现在事件循环会处理异步任务
- 请求响应成功返回
这个顺序直接印证了:调用rp(...)的时候,只是把请求任务加入到了事件循环的队列中,并没有立刻触发网络请求。只有当当前所有同步代码都跑完,Node.js的事件循环开始处理异步任务队列时,这个请求才会真正被发送出去,之后等待响应返回,Promise才会进入对应的状态。
内容的提问来源于stack exchange,提问作者Meena Alfons
相关产品推荐
相关产品推荐

