首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Presence章节Presence Phoenix 1.4.6对标识符“socket”的提升已声明

问Presence章节Presence Phoenix 1.4.6对标识符“socket”的提升已声明
EN

Stack Overflow用户
提问于 2019-05-25 23:47:51
回答 1查看 71关注 0票数 0

我正在读凤凰城指南1.4.6,我在Chapter Presence。因此,我遵循了本章的所有步骤,并且我的控制台javascript对此进行了抱怨:

代码语言:javascript
复制
app.js:1 Uncaught Error: Module build failed: SyntaxError: /Users/romenigld/workspace/phoenix/hello/assets/js/app.js: Identifier 'socket' has already been declared (21:4)

  19 | import {Socket, Presence} from "phoenix"
  20 | 
> 21 | let socket = new Socket("/socket", {
     |     ^
  22 |   params: {user_id: window.location.search.split("=")[1]}
  23 | })
  24 | 
    at Parser.raise (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:6322)
    at ScopeHandler.checkRedeclarationInScope (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:3754)
    at ScopeHandler.declareName (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:3720)
    at Parser.checkLVal (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:8006)
    at Parser.parseVarId (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:10441)
    at Parser.parseVar (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:10412)
    at Parser.parseVarStatement (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:10234)
    at Parser.parseStatementContent (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:9830)
    at Parser.parseStatement (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:9763)
    at Parser.parseBlockOrModuleBlockBody (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:10340)
    at Parser.parseBlockBody (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:10327)
    at Parser.parseTopLevel (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:9692)
    at Parser.parse (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:11209)
    at parse (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/parser/lib/index.js:11245)
    at parser (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/core/lib/transformation/normalize-file.js:170)
    at normalizeFile (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/core/lib/transformation/normalize-file.js:138)
    at runSync (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/core/lib/transformation/index.js:44)
    at runAsync (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/core/lib/transformation/index.js:35)
    at process.nextTick (:4000/Users/romenigld/workspace/phoenix/hello/assets/node_modules/@babel/core/lib/transform.js:34)
    at process._tickCallback (:4000/internal/process/next_tick.js:61)
    at eval (app.js:1)
    at Object../js/app.js (app.js:81)
    at __webpack_require__ (app.js:20)
    at eval (app.js:1)
    at Object.0 (app.js:92)
    at __webpack_require__ (app.js:20)
    at app.js:69
    at app.js:72
(anonymous) @ app.js:1
./js/app.js @ app.js:81
__webpack_require__ @ app.js:20
(anonymous) @ app.js:1
0 @ app.js:92
__webpack_require__ @ app.js:20
(anonymous) @ app.js:69
(anonymous) @ app.js:72

我的代码在这个repo中。

如果我删除了let,它会报告一个新的错误:

代码语言:javascript
复制
ReferenceError: Can't find variable: socket
WebSocket connection to 'ws://localhost:4000/socket/websocket?token=undefined&vsn=2.0.0' failed: Unexpected response code: 500
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-26 03:20:22

您的错误是:

代码语言:javascript
复制
Identifier 'socket' has already been declared

这意味着你不能写:

代码语言:javascript
复制
let socket = "abc"
let socket = "def"

而且,您实际上是在app.js中这样做的

代码语言:javascript
复制
//********* HERE **************
import socket from "./socket"   

import {Socket, Presence} from "phoenix"
window.Presence = Presence;

//********* AND HERE ***********
let socket = new Socket("/socket", { 
  params: {user_id: window.location.search.split("=")[1]}
})

这行代码:

代码语言:javascript
复制
import socket from "./socket"   

创建一个名为socket的变量,因此您不能随后告诉js创建另一个名为socket的变量,如下所示:

代码语言:javascript
复制
let socket = new Socket("/socket", { 
  params: {user_id: window.location.search.split("=")[1]}
})

我会尝试去掉app.js中的以下import语句

代码语言:javascript
复制
import socket from "./socket" 

如果您确实需要在app.js中导入socket (看起来并不是这样),则可以在导入时为socket指定一个不同的名称。参见here。或者,您可以将在app.js中声明的套接字变量命名为其他名称:

代码语言:javascript
复制
let presence_socket = new Socket("/socket", { 
  params: {user_id: window.location.search.split("=")[1]}
})
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56306370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档