我的代码运行良好,直到我决定尝试将自己的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才能使第二个功能按预期工作。
答案 0 :(得分:2)
您需要首先解决translateIt()
承诺,然后使用另一个then()
创建数组
更改:
return [practice.translateIt(name), name];
收件人
return practice.translateIt(name).then(translate => [translate, name]);
答案 1 :(得分:0)
如果您的代码没有完整的副本,但是您似乎在将数组中的Promise返回给then处理程序,我认为这是行不通的?
practice.screamIt('matt').then((name) => {
return practice.translateIt(name);
}).then((translate) => {
...etc
}).catch((errorMessage)=>{
console.log(errorMessage)
});
如果您尝试类似的操作,我相信这对您会有所帮助,因为一旦诺言解决,它将返回结果。
答案 2 :(得分:0)
我想您需要返回Promise.all([practice.translateIt(name), name])
而不是practice.translateIt(name)
,因为我要返回一个承诺。
那应该返回一个解析为值数组的单个promise。