在JavaScript中使用Promise时有些奇怪

在JavaScript中使用Promise时有些奇怪,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我有一个返回承诺对象的函数。这是我的密码 var foo = function(){ // doSomething() is a promise object return doSomething().then(() => { Promise.resolve('Hello'); }); }; foo().then((res) => { console.log(res); // res = undefined but not "

我有一个返回承诺对象的函数。这是我的密码

var foo = function(){
    // doSomething() is a promise object
    return doSomething().then(() => {
        Promise.resolve('Hello');
    });
};

foo().then((res) => {
    console.log(res);
    // res = undefined but not "Hello"
});

我以为函数
foo
会返回promise对象,我会得到字符串“Hello”。但我没有定义。为什么?

在Promise.resolve之前,您错过了一次退货,所以应该是这样

var foo = function(){
    return doSomething().then(() => {
        return Promise.resolve('Hello');
        ^^^^^^
    });
};
但是,实际上您根本不需要它,只需返回字符串Hello即可

var foo = function(){
    return doSomething().then(() => {
        return 'Hello';
    });
};
通过使用arrow函数的简洁体形式,省去了
{}
,可以使它变得更简单

var foo = function(){
    return doSomething().then(() => 'Hello');
};

你错过了承诺前的回报。解决,所以它应该是

var foo = function(){
    return doSomething().then(() => {
        return Promise.resolve('Hello');
        ^^^^^^
    });
};
但是,实际上您根本不需要它,只需返回字符串Hello即可

var foo = function(){
    return doSomething().then(() => {
        return 'Hello';
    });
};
通过使用arrow函数的简洁体形式,省去了
{}
,可以使它变得更简单

var foo = function(){
    return doSomething().then(() => 'Hello');
};

您缺少
承诺之前的
返回
。解决
。但是,实际上您根本不需要它,只需返回字符串
Hello
。您可以使用箭头函数的简洁体形式,省去
{}
,只需说
,然后(()=>'Hello')
,使它变得更简单。谢谢,它可以工作并且看起来更好。你能展示你的
doSomething
方法吗?@timothyclifford根据定义
doSomething
的实现与此代码的行为无关,只要它返回OP已经声明的承诺。你缺少
承诺之前的
返回
。但是,实际上您根本不需要它,只需返回字符串
Hello
。您可以使用箭头函数的简洁体形式,省去
{}
,只需说
,然后(()=>'Hello')
,使它变得更简单。谢谢,它工作起来,看起来更好。你能展示一下你的
doSomething
方法吗?@timothyclifford根据定义,
doSomething
的实现与此代码的行为无关,只要它返回OP已经声明的承诺。