Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在从外部api获取数据时将数据返回到客户端?_Javascript_Android_Node.js_Api - Fatal编程技术网

Javascript 如何在从外部api获取数据时将数据返回到客户端?

Javascript 如何在从外部api获取数据时将数据返回到客户端?,javascript,android,node.js,api,Javascript,Android,Node.js,Api,我有一个在节点中有后端的应用程序。假设有一个API端点(/get_menu)来获取所有菜单。 当应用程序调用/get_menu时,我调用不同餐厅的外部API,当所有餐厅返回菜单时,我将其发送到应用程序。我用承诺来实现这一切 由于一些餐馆花费了很多时间,所以我希望在不断从餐馆API获取数据的同时将数据返回到应用程序。例如,若其中两个立即返回菜单,那个么我会将这两个返回到应用程序,在那个之后,当我继续获取其他API的数据时,我会继续将其发送到应用程序 使用单个API端点(即get_菜单)有哪些好方法

我有一个在节点中有后端的应用程序。假设有一个API端点(/get_menu)来获取所有菜单。
当应用程序调用/get_menu时,我调用不同餐厅的外部API,当所有餐厅返回菜单时,我将其发送到应用程序。我用承诺来实现这一切

由于一些餐馆花费了很多时间,所以我希望在不断从餐馆API获取数据的同时将数据返回到应用程序。例如,若其中两个立即返回菜单,那个么我会将这两个返回到应用程序,在那个之后,当我继续获取其他API的数据时,我会继续将其发送到应用程序


使用单个API端点(即get_菜单)有哪些好方法可以做到这一点?

有几种解决方案

  • 为了给你的问题一个字面上的答案,你可以使用 实现socket-like socket.io向客户端发送数据 随时都可以

  • 第二个选择是保留中国餐馆的菜单 一个数据库,并从那里为用户服务。在后台,, 定期使用cron更新数据库。不是真的 建议让您的用户等待,直到您的所有菜单API 决心


  • 我建议为此使用基于redis的队列机制。您可以将每个API作为作业推送到该队列中


    有一个非常好的基于redis的队列npm包。作业处理完成时,会通知一些事件。作业完成后,您可以将数据发送回应用程序。

    在客户端javascript上实现一个使用UUID(请求服务器获取菜单列表的唯一ID)的web worker

    然后,服务器将创建一个数据库条目,为每个远程api请求分配一个唯一的id。然后,node.js立即将请求ID列表发送回客户端,并呈现。获取菜单的后台任务是单独运行的,每次结果出现时,它都存储在数据库中。客户端web工作者将定期请求它所需的UUID列表,服务器将使用已响应的UUID进行响应。一旦发送到客户端,数据将被删除,客户端将呈现结果,并从其请求列表中重新保存该uuid以检索数据

    它本质上是一个粗糙的、不可靠的结果队列,只要服务器能够跟上所有请求,它就可以安全运行

    另请参见互联网上的“事件来源”


    如果您的主机非常可靠,则更现代的版本包括使用websocket和websocket服务器的类似实现。

    可能不使用
    承诺。所有