2017-08-29 83 views
0

我有這樣的情況下,我想使用相同的變量名多次使用對象desctructuring:相同的變量名的多次聲明與對象解構

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); 

,但是當我運行節點的腳本,節點會抱怨運行時之前:

SyntaxError: Identifier 'body' has already been declared 

出現妨礙我獲得一個簡單的解決兩個問題:

  1. 我不能解構對象做到這一點:

    let {a,b} = c; {a,b} = c; // not allowed

  2. 我不能重命名bodyresponse,因爲這是由調用返回。

我該怎麼辦?

也許做的最好的事情是一樣的東西:

let {body,response} = ... 
let {body:body1, response:resp1} = ... 

回答

2

我不能解構對象做到這一點:{a,b} = c;

你可以,你只需要put it in parenthesis to be syntactically valid

({a, b} = c); 

也許最好的辦法就是像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); 
} 

當然,您也可以只使用var代替let,這對於重新聲明並不討厭。

+0

該錯誤是由於再次使用'let'來聲明同名的變量導致的。如果你想重用body,可以使用'var'或者放下'let'並且第二次不使用。 – Chris

+1

@chris我認爲這是由OP瞭解是什麼導致錯誤,所以我沒有再提到它 – Bergi

+0

我認爲塊範圍可能是最乾淨的方式來做到這一點,或使用var而不是let。 –

相關問題