使用 Google 翻译 API 的异步翻译。我究竟做错了什么?
Asynchronous translation with Google Translate API. What am I doing wrong?
总是被异步代码纠结,不知道自己的错误在哪里。
此代码从数据库中读取产品名称并将它们放入 untranslated
数组中。之后,遍历数组,翻译每个项目,并推入新的 translated
数组。
SQL 部分工作正常,但不幸的是,translated
数组是空的。我正在使用 mssql and translate npm 包。
我怎样才能使这个工作?
var untranslated = [];
var translated = [];
var query = `select name from products`
new sql.ConnectionPool(db).connect().then(pool => {
return pool.request().query(query)
}).then(result => {
for (var i = 0; i < result.recordset.length; i++) {
var item = result.recordset[i];
untranslated.push(item.name)
}
// I'm messing it up here somewhere.
untranslated.map(item => {
translate(item, { from: 'mk', to: 'en' }).then(result => {
translated.push(result);
})
})
console.log(translated); // Logs [];
}).catch(err => {
console.log(err);
sql.close();
});
这应该让你继续:
Promise.all(untranslated.map(item => translate(item, { from: 'mk', to: 'en' })))
.then(translated => console.log(translated));
在您的原始代码中,您调用了 translate
,returns 是一个 Promise。 Promise 最终 实现或拒绝。但是,您创建了很多承诺,然后继续立即打印 translated
。此时,Promises 还没有实现。
这就是 Promise.all
的用武之地。我们没有为单个承诺调用 then
,而是将它们全部传递给 Promise.all
,如果所有承诺都已解决并包含所有 Promise 结果的数组。
总是被异步代码纠结,不知道自己的错误在哪里。
此代码从数据库中读取产品名称并将它们放入 untranslated
数组中。之后,遍历数组,翻译每个项目,并推入新的 translated
数组。
SQL 部分工作正常,但不幸的是,translated
数组是空的。我正在使用 mssql and translate npm 包。
我怎样才能使这个工作?
var untranslated = [];
var translated = [];
var query = `select name from products`
new sql.ConnectionPool(db).connect().then(pool => {
return pool.request().query(query)
}).then(result => {
for (var i = 0; i < result.recordset.length; i++) {
var item = result.recordset[i];
untranslated.push(item.name)
}
// I'm messing it up here somewhere.
untranslated.map(item => {
translate(item, { from: 'mk', to: 'en' }).then(result => {
translated.push(result);
})
})
console.log(translated); // Logs [];
}).catch(err => {
console.log(err);
sql.close();
});
这应该让你继续:
Promise.all(untranslated.map(item => translate(item, { from: 'mk', to: 'en' })))
.then(translated => console.log(translated));
在您的原始代码中,您调用了 translate
,returns 是一个 Promise。 Promise 最终 实现或拒绝。但是,您创建了很多承诺,然后继续立即打印 translated
。此时,Promises 还没有实现。
这就是 Promise.all
的用武之地。我们没有为单个承诺调用 then
,而是将它们全部传递给 Promise.all
,如果所有承诺都已解决并包含所有 Promise 结果的数组。