Ale*_*lls 1 javascript node.js
我有这种情况,我想在对象解构中多次使用相同的变量名:
let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers);
let parsedBody = await siamese.parse(body);
assert(parsedBody.success, 'response body should have a success property.');
assert(parsedBody.success.length === usernames.length, 'wrong number of items in response body array.');
let {body, response} = await requestp('get', `${cdtAPIUrl}/caches/whitelist`, headers);
let parsedBody = await siamese.parse(body);
Run Code Online (Sandbox Code Playgroud)
但是当我用 node 运行脚本时,node 会在运行前抱怨:
SyntaxError: Identifier 'body' has already been declared
Run Code Online (Sandbox Code Playgroud)
有两个问题使我无法获得简单的解决方案:
我不能用对象解构来做到这一点:
let {a,b} = c;
{a,b} = c; // not allowed
我无法重命名bodyor response,因为这是调用返回的内容。
我该怎么办?
也许最好的做法是这样的:
let {body,response} = ...
let {body:body1, response:resp1} = ...
Run Code Online (Sandbox Code Playgroud)
我不能用对象解构来做到这一点:
{a,b} = c;
你可以,你只需要把它放在括号中就可以在语法上有效:
({a, b} = c);
Run Code Online (Sandbox Code Playgroud)
也许最好的办法是
let {body:body2, response:resp2} = …
是的,这确实是最好的解决方案。您甚至可能想使用const代替let.
我该怎么办?
另一个解决方案,我不一定会推荐,但只是为了完整性想提一下,是为变量引入单独的范围:
{
let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers);
let parsedBody = await siamese.parse(body);
assert(parsedBody.success, 'response body should have a success property.');
assert(parsedBody.success.length === usernames.length, 'wrong number of items in response body array.');
}
{
let {body, response} = await requestp('get', `${cdtAPIUrl}/caches/whitelist`, headers);
let parsedBody = await siamese.parse(body);
}
Run Code Online (Sandbox Code Playgroud)
当然,您也可以只使用var代替let,这不会讨厌重新声明。
| 归档时间: |
|
| 查看次数: |
592 次 |
| 最近记录: |