用于HTTP请求的可移植JavaScript

用于HTTP请求的可移植JavaScript,javascript,node.js,google-chrome,google-apps-script,Javascript,Node.js,Google Chrome,Google Apps Script,有没有可能编写JavaScript代码来发出HTTP请求,以便使用合适的实用程序库在多个运行时使用相同的代码?在这种情况下,如果代码可以在node.js、Google应用程序脚本上运行,并作为Google Chrome扩展或ChromeOS应用程序运行,这将是可取的 问题是这些不同的运行时有不同种类的API和不同的功能来适应编程风格。应用程序脚本提供URLFetchApp,它是同步的。Chrome和其他浏览器支持XMLHttpRequest,这是异步的。Node.js支持异步和同步编程,例如,可

有没有可能编写JavaScript代码来发出HTTP请求,以便使用合适的实用程序库在多个运行时使用相同的代码?在这种情况下,如果代码可以在node.js、Google应用程序脚本上运行,并作为Google Chrome扩展或ChromeOS应用程序运行,这将是可取的

问题是这些不同的运行时有不同种类的API和不同的功能来适应编程风格。应用程序脚本提供URLFetchApp,它是同步的。Chrome和其他浏览器支持XMLHttpRequest,这是异步的。Node.js支持异步和同步编程,例如,可以使用光纤将不同的样式组合在一起。但是,其他运行时不支持光纤。另一方面,googleappscript似乎不支持使用async/await插入异步代码


如果不对代码进行某种预处理,似乎不可能编写支持所有这些运行时的代码。

遵循这些步骤是可能的:

  • 在为HTTP请求抽象提供服务时,您应该检查当前环境中提供了哪些HTTP方法
  • 导入请求抽象规范化(即始终异步并始终返回承诺)
  • 请求抽象应该为其功能提供相同的接口(GET/POST/DELETE/PUT/PATCH)

这不是一种很好的用于堆栈溢出的Q类型,但是看看axios,您需要一种包装器,它具有适用于您想要支持的所有API的适配器。可能基于承诺。由于它是标准化的,所以您可能希望坚持在可能的地方提取。同步代码可以转换为异步,但不能转换为异步。如果某些API不支持异步,那么要么使用两个分叉,要么尝试这样的解决方法,适用于node.js和浏览器支持,但不适用于Google应用程序脚本,除非可以使其支持异步代码。您可以将IE URLFACHTAPP包装在自己的ES6 promise结构中,并使其异步。看看@Mose,至少需要客户端脚本。