2

아래 코드는 내 텍스트를 독일어 언어로 번역하고 번역 한 후에 할당하려고합니다. 그러나 빈 문자열을 얻는다면 도움을 주시고 제가 실수를하고있는 동안 아래 코드를 실행하십시오. 실행 후 translatedString 내가 번역 함수 외부 translatedString을 사용하려면JavaScript에서 변수를 할당 할 수 없습니다.

"안녕 무형 문화 유산 리베 독일 Sprache"와 같은 결과를 가지고 있어야 있도록

이 잘못되면 내 코드를 코드와 보정 솔루션을 나에게주세요 그래서 결과는 세계 일 것이다.

// working with string translation 

const translate = require('google-translate-api'); 

var myString = "Hello I love German language"; 

console.log("My String is "+ myString); 
// result is My String is Hello I love German language 

var translatedString = translate(myString, {to: 'de'}) 
     .then(res => {translatedString = res.text}); 

console.log("Translated String is "+ JSON.stringify(translatedString)); 
// result is Translated String is {} 
// expected result is Translated String is Hallo ich liebe deutsche Sprache 

답변

3

번역은 약속을 되 돌린다. 약속은 이며, 결과는입니다. 번역은 즉시 사용할 수 없습니다. 최종 값과 상호 작용하려면 약속의 .then 메소드에 코드를 넣어야합니다.

const translate = require('google-translate-api'); 

let myString = "Hello I love German language"; 
console.log("My String is "+ myString); 

let promise = translate(myString, {to: 'de'}).then(res => { 
    return res.text; 
}); 

promise.then(translatedString => { 
    console.log("Translated String is "+ JSON.stringify(translatedString)); 
}); 

console.log('The translation has started, but it isn\'t ready yet'); 

편집 : 요청으로, 여기 변수에 저장하는 버전입니다.

const translate = require('google-translate-api'); 

let myString = "Hello I love German language"; 
console.log("My String is "+ myString); 

let translatedString = null; 
let promise = translate(myString, {to: 'de'}).then(res => { 
    translatedString = res.text; 
}); 

promise.then(() => { 
    console.log("Translated String is "+ JSON.stringify(translatedString)); 
}); 
+0

내가 번역 함수 외부 translatedString를 사용하려는 async 함수 내에서 다음 줄에 Promise의 값을 얻을 수 Promise 체인 또는 async/await.then()Promise 값을 return하는 .then()을 사용할 수 있도록 result shout global –

+0

약속이 해결되기 전에 translatedString을 사용할 수 없습니다. 해결할 약속을 기다리려면 코드를 .then 블록에 넣으십시오. .then 블록 밖에 * 넣은 모든 코드는 약속을 기다리지 않으므로 translatedString을 사용할 수 없습니다. –

+0

translatedString이 준비 될 때까지 기다렸다가 코드를 할당하여 코드를 리팩터링 할 수있는 방법이 있습니다. 번역 기능을 사용하지 않고 전역으로 사용할 수 있습니다. –

0

당신이 약속이 해결 될 때 당신이 그것을 기록해야하는 동안 결과를 받기 전에 변수를 기록하고 있기 때문에 :

translate(myString, {to: 'de'}).then(res => { 
    console.log(res.text); //Hallo ich liebe deutsche Sprache 
}); 
0

마지막 console.log() 통화가의 밖에이 내가 추천하는 것이 아니다 Promise 체인. 당신은

const translatePhrase = async(myString) => { 

    const translate = require('google-translate-api'); 

    // working with string translation 

    console.log("My String is "+ myString); 
    // result is My String is Hello I love German language 

    const translatedString = await translate(myString, {to: 'de'}).then(res => res.text); 

    console.log("Translated String is "+ JSON.stringify(translatedString)); 

} 

translatePhrase("Hello I love German language");