方法链是自我意识的吗?

Are method-chains self-aware?

在包 Super Agent 中,文档状态:

A request can be initiated by invoking the appropriate method on the request object, then calling .then() (or .end() or await) to send the request.

request
   .get('/search')
   .then(res => {
      // res.body, res.headers, res.status
   });

但是 SuperAgent 支持方法链接,例如

request.get('/search')
  .set('header1','value')
  .set('header2','value')

在发送前修改请求。所以...

请求对象如何知道方法链何时完成,从而不会过早发送?

我的理论是 request 对象的任何链 return 是一个可以 await.then() 的对象,并且如果是,它将发出一个请求和 return 一个实际的承诺。

我在 superagent 存储库中四处查看,找不到类似的东西。在方法链完成之前等待发送请求还有什么方法可以完成?

只要去源头查找,永远不会出错。所以,如果你查看 the code for .then(),你会发现它自己调用了 .end()

因此,在调用.then().end()时发送请求。到那时,其他方法只是配置请求对象。

并且,使用 await 将调用 .then() 承诺。

此外,如果您在上面的源文件参考中搜索 .end,您将看到许多代码示例都在链的末尾显示 .end()。这是 superagent 的原始设计架构。然后,当 promises 出现时,添加了对 .then() 的支持,并在内部使用 .end()