2017-11-19 13 views
0

で保留はNodejs

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

async function translateSentence(sentence, languebase, languagetranslation) { 
    var sentenceTranslated = await translate(
     sentence, 
     { from: languebase, to: languagetranslation }); 

    return sentenceTranslated.text; 
} 

var Translatedtext = translateSentence("Welcome", "en", "fr"); 
console.log(Translatedtext); 

UPDATE:私はに変換されたデータを返すようにしようとしている

ここでJSONは、私がやろうとしているものです:

data = new Object(); 
    data.Translatedtext = Translatedtext; 

    var string = JSON.stringify(data); 
    console.log(JSON.parse(string)); 

アウトが{ Translatedtext: {} }として示しており、私は{ Translatedtext: {Bienvenue} }

のようなものを期待しました
+0

翻訳で何をしているのかを確認する必要があります。それは約束を返すべきです。 –

+0

@GetOffMyLawn:いいえ、わかりません。 'async'関数**常に**約束を返します。 –

+0

'translate'は決して解決されないので、約束が保留されている可能性があります。 –

答えて

0

オブジェクトにテキストを追加します。

これは次のように行われることになります。

async function performOperations(){ 
    let Translatedtext = await translateSentence("Welcome", "en", "fr") 
    data = new Object(); 
    data.Translatedtext = Translatedtext; 

    var string = JSON.stringify(data); 
    console.log(JSON.parse(string)); 
} 

performOperations() 

それはGoogleのAPIへのリクエストの処理を完了した前に、あなたがやっていることは、オブジェクトをチェックしています。だからあなたのデータは、その場所に近づいている可能性が高いです。ちょうどあなたがあまりにも早くそのオブジェクトを見ているだけです。

0

async関数は約束を返すので、Translatedtextは約束を意味するものであり、それを破棄すると、保留中のことを含めてその約束の詳細が表示されます。

あなたは結果を取得することを意図している場合、あなたはawaitにそれ(またはthenを使用する)必要があるだろう:

var Translatedtext = await translateSentence("Welcome", "en", "fr"); 
// ------------------^ 
console.log(Translatedtext); 

(それが拒否した場合、例外を扱う)、または

translateSentence("Welcome", "en", "fr") 
    .then(Translatedtext => { 
     console.log(Translatedtext); 
    }) 
    .catch(err => { 
     // Handle the fact an error occurred 
    }); 

awaitを使用するには、async機能が必要です。

+0

'Translatedtext'をJsonに格納できますか? – sami

+0

@サミ:....確かに....?なぜあなたはできないでしょうか? –

1

コードがasync/awaitで書かれている場合、それはasync関数ではなく値を取得できるという意味ではありません。あなたの関数はPromiseを返します。とにかく、あなたは

translateSentence("Welcome", "en", "fr").then(text => console.log(text)); 

のように記述するか

async anotherFunction() { 
    const text = await translateSentence("Welcome", "en", "fr"); 
    console.log(text); 
} 
0

translateSentenceasync関数内で、この関数を呼び出す必要があるので、それはPromiseを返し、asyncとして定義されます。

これは、あなたは/が結果にアクセスできるようになる前に拒否約束の解決を待つ必要があることを意味:translateは約束を返して、私たちは非同期機能を作成して行うためにtranslateSentenceために待つことができると仮定すると、

translateSentence("Welcome", "en", "fr") 
    .then(Translatedtext => { 
    var data = { Translatedtext }; 
    var string = JSON.stringify(data); 
    console.log(JSON.parse(string)); 
    }) 
    .catch(err => console.log(err);