javascript - 无法使用承诺正确调用对象
问题描述
我的代码运行良好,直到我决定尝试将我的 Promise 链中的两个值返回到下一个函数。我可以调用其中一个值,但不能调用另一个。
我的代码看起来像这样
app.get('/projects', (req, res) => {
practice.screamIt('matt').then((name) => {
return [practice.translateIt(name), name]; //puts name as the parameter for next function
}).then((translate) => {
console.log(translate[1] + ' test occured here')
console.log(translate[0][0].englishName)
return [`The name you entered is ${translate[1]}`, `${translate[0].englishName} is ${translate[0].spanishName} in spanish`]
}).then((value)=>{
res.render('projects', {
pageTitle: "Projects Page",
practice: practice,
value1: value[0],
value2: value[1]
});
}).catch((errorMessage)=>{
console.log(errorMessage)
})
});
当我记录第一个数据时,它显示:
[ Promise { { englishName: 'Matt', spanishName: 'Mateo' } },'Matt' ]
我希望能够调用englishName,但如果没有得到未定义似乎就无法这样做。我需要能够调用 englishName 以便我的第二个函数按预期工作。
解决方案
您需要首先解决translateIt()
承诺并使用另一个then()
来创建数组
改变:
return [practice.translateIt(name), name];
到
return practice.translateIt(name).then(translate => [translate, name]);
推荐阅读
- python - 如何将 mm:ss.ms 转换为 ss.ms?
- python - 我正在尝试为 > 0 的随机数编写代码,但它不断吐出 0
- python - Pickle 错误:IndexError:列表索引超出范围
- ios - 从左到右的过渡屏幕?
- vba - 在 VBA 中为除一个工作表之外的所有工作表输出多个 CSV 文件并重命名
- altium-designer - Altium Designer PCB 导入麻烦
- ios - 在 Swift4 上通过键盘隐藏时如何滚动 UITextField?
- javascript - 如何使用带有 Mysql 数据库(任何)或 Firebase 的 Electron Js 的 Java 后端?
- java - 如何在 JavaFx 中获取 LineChart 刻度标签的宽度?
- java - ThymeLeaf 片段(带 Bootstrap)仅适用于索引文件,不适用于其他 html 文件(Java Spring)