无法通过诺言正确调用对象

时间:2018-11-09 14:04:45

标签: javascript node.js

我的代码运行良好,直到我决定尝试将自己的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才能使第二个功能按预期工作。

3 个答案:

答案 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。