问题
客户端调用NodeJS服务器。这会导致进一步调用第三方API。然后,API异步调用回NodeJS服务器。如何让客户端知道异步回调已经完成?
详情
我有一个NodeJS服务器,这两个路由(代码是coffeescript):
app.get '/security/login/application/authorise', ->
applicationService.authorise()
app.get '/security/login/application/callback', (req, res) ->
applicationService.login req, res
第一条路线由我的AngularJS客户端调用。其目的是授权客户端并允许其启动(用户稍后将登录)。授权过程涉及调用第三方安全API。
安全API执行其操作,然后通过上面显示的/callback
路由回调到NodeJS服务器。传递给回调的信息允许进一步调用API,以确定原始授权请求是通过还是失败。
问题是第一次调用/authorise
路由的呼叫当然是异步的,因此立即返回给客户端。然后客户端处于不确定状态,不确定NodeJS服务器是否已授权它。
请注意,我不能只嵌套这些调用(imo),因为第一次调用API只会返回200 OK,无论如何。只有在将来某个时候,第三方API通过/callback
路由回调到NodeJS服务器才能启动新会话时,此过程才会继续。
选项
看来我有很多不愉快的选择:
保持异步。将控制权返回给客户端,然后让客户端轮询服务器,可能使用一些独特的临时回调ID来确定回调是否已完成。
Go Synchronous。用某种hacky循环阻止返回。也许承诺可以以某种方式清理它。
转向双向。使用套接字允许来自服务器的推送通知(但是我必须支持IE8之类的旧浏览器。)
我想我可能已经过度解决了这个问题,解决方案很可能比我想象的更容易。感谢您的帮助。