Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从节点JS中的Google Cloud Translate API返回值_Javascript_Node.js_Google Cloud Platform_Google Translate - Fatal编程技术网

Javascript 从节点JS中的Google Cloud Translate API返回值

Javascript 从节点JS中的Google Cloud Translate API返回值,javascript,node.js,google-cloud-platform,google-translate,Javascript,Node.js,Google Cloud Platform,Google Translate,我正在使用NodeJS玩googlecloudtranslateapi。我可以console.log从承诺返回的值。但我不确定如何将该值传递到像EJS这样的模板文件中。屏幕上显示的是[对象承诺]。 这是我的密码: var express = require('express'); var app = express(); app.set('view engine', 'ejs'); // Imports the Google Cloud client library const Tr

我正在使用NodeJS玩googlecloudtranslateapi。我可以console.log从承诺返回的值。但我不确定如何将该值传递到像EJS这样的模板文件中。屏幕上显示的是[对象承诺]。 这是我的密码:

var express = require('express');
var app     = express();

app.set('view engine', 'ejs');

// Imports the Google Cloud client library
const Translate = require('@google-cloud/translate');
// Your Google Cloud Platform project ID
const projectId = process.env.GOOGLEPROJECTID;

// Instantiates a client
const translateClient = Translate({
  projectId: projectId
});

// The text to translate
const text = 'Hello, world!';
// The target language
const target = 'ru';

// Translates some text into Russian
let russianTranslate = translateClient.translate(text, target)
  .then((results) => {
    const translation = results[0];

    console.log(`Translation: ${translation}`);
    return {textToTranslate: `Text: ${text}`}
  });

app.get('/', function(req, res){
  res.render('index', { translation: russianTranslate });
});

app.listen(8080, function() {
  console.log('App Started!');
});
It console.logs很好,但是我在使用EJS时没有得到相同的值

如何解决此问题?

先解决承诺,而不是按原样传递承诺 问题在于,您实际上并没有将翻译后的字符串传递给模板,而是将返回翻译的promise对象。这就是为什么会得到
[object Promise]

在代码中,转换后的字符串被分配给回调函数中的
results[0]
。这意味着您需要将该变量传递给渲染器,但由于它仅在回调中可用,因此需要确保它首先完成

最简单的方法是将使用它的任何代码移动到
.then()
中的回调中,然后从那里开始

// Translates some text into Russian
translateClient.translate(text, target)
  .then((results) => {

    app.get('/', function(req, res){
      res.render('index', { translation: results[0] });
    });

    app.listen(8080, function() {
      console.log('App Started!');
    });

  });
免责声明:这是未经测试的凌晨3点信封背面的代码