Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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 操作电缆错误无法从…执行命令RuntimeError-找不到标识符为的订阅_Javascript_Reactjs_Redux_Ruby On Rails 5_Actioncable - Fatal编程技术网

Javascript 操作电缆错误无法从…执行命令RuntimeError-找不到标识符为的订阅

Javascript 操作电缆错误无法从…执行命令RuntimeError-找不到标识符为的订阅,javascript,reactjs,redux,ruby-on-rails-5,actioncable,Javascript,Reactjs,Redux,Ruby On Rails 5,Actioncable,我在调用Action Cable频道“UsersChannel”的上游执行时遇到错误。这是完整的错误消息: 无法从({“command”=>“message”,“identifier”=>“{\“channel\”:\“UsersChannel\”}”,“data”=>“{\“id\”:\“1\”,“action\”:\“show\”})执行命令。[运行时错误-找不到标识符为“{“channel:“UsersChannel”}”的订阅]:/Users/robskrob/.rvm/gems/rub

我在调用Action Cable频道“UsersChannel”的上游执行时遇到错误。这是完整的错误消息:

无法从({“command”=>“message”,“identifier”=>“{\“channel\”:\“UsersChannel\”}”,“data”=>“{\“id\”:\“1\”,“action\”:\“show\”})执行命令。[运行时错误-找不到标识符为“{“channel:“UsersChannel”}”的订阅]:/Users/robskrob/.rvm/gems/ruby-2.4.1/gems/actioncable-5.1.4/lib/action_-cable/connection/subscriptions.rb:76:in
find'/Users/robskrob/.rvm/gems/ruby-2.4.1/gems/actioncable-5.1.4/lib/action_-cable/connection/subscriptions.rb:53:in
perform|-action''/Users/robskrob/.rvm/gems/ruby-2.4.1/gems/actioncable-5.1.4/lib/action_-cable/connection/subscriptions.rb:17:in
execute_command'./Users/robskrob/.rvm/gems/ruby-2.4.1/gems/actioncable-5.1.4/lib/action_-cable/connection/base.rb:85:in
dispatch_-websocket||||/Users/robskrob/.rvm/gems/ruby-2.4.1/gems/actioncable-5.1.4/lib/action\u-cable/server/worker.rb:58:在“调用中的块”中


这非常奇怪,因为在中,我成功地使用订阅的通道执行上游操作来创建用户(
usersChannel.perform('create',{…})
)。为什么我在创建用户的同一用户上进行不同呼叫时会看到上述错误?在调用
UsersChannel\create
之前,它能够找到
UsersChannel
订阅。在前端用
UsersChannel.perform('show',{…})
调用
UsersChannel#show
时,为什么会抛出这个错误?

我通过创建一个HTTP REST客户端来向用户发出请求,从而解决了这个问题。换句话说,当浏览器中的路由为,
localhost:3000/user/1
时,导出的操作
loadUser
向服务器发出RESTful请求,请求包含用户数据的响应,这就是绘制上述路由时我需要应用程序执行的操作

我最初的方法的问题如下:在文件中,我同时进行上游调用以获取用户并建立到
UsersChannel
的连接,获取用户的调用发生在服务器和客户端之间建立实际连接之前,关于
UsersChannel
。在actioncable成功进行任何上游调用之前,必须首先执行以下操作:“UsersChannel正在从users\u频道进行流式传输”

简言之,在建立流之前,我的应用程序正在上游执行创建订阅,因此对服务器的调用,
UsersChannel#show
,无法成功。我想您可以调用我遇到的问题的根源,一个竞争条件:上游调用击败了客户端和服务器之间建立连接流的过程


经验教训:当客户端需要在整个页面重新加载时接收数据时,使用HTTP。通过actioncable进行的调用可能没有在客户端和服务器之间建立上行调用成功所需的流。

在我的情况下,两个流通道之间会出现争用情况。我确实通过添加

stop_all_streams
每当调用“unsubscribed”方法时

 def unsubscribed
   #Unsubscribes all streams associated with this channel from the pubsub queue.
    stop_all_streams
 end