【问题标题】:How do nested Javascript returns "pass up" promises?嵌套的 Javascript 如何返回“传递”承诺?
【发布时间】:2019-02-05 23:55:49
【问题描述】:

这个问题有两部分,都与 Javascript 承诺如何使用 return 语句传递函数有关。

1)

我有简单的 Javascript 函数,其中包括多个返回语句。内部函数向箭头函数返回一个promise,箭头函数也被返回,像这样:

const returnMe(data){
  return () => {
    return Promise.resolve(data);
  };
};

我可以写下面的代码吗?

returnMe("Hello!").then((msg) => { console.log(msg) }); /// --> output "Hello!" ??

换句话说,如果嵌套函数接收到已解决/拒绝的承诺,并且该函数返回给它的父函数,那么父函数是否会收到已解决/拒绝的承诺?

2)

另一个相关但有些不同的例子......

 const returnMe(data){
    return () => {
      return Promise.resolve(data).then(() => { console.log("Ha!") });
    };
 };

在这种情况下,“then”调用发生在函数内部。 然后调用“用完”承诺吗?在这种情况下,返回箭头函数,然后返回父函数?

感谢您的帮助。

【问题讨论】:

  • 1) returnMe("Hello!").then 会报错,因为returnMe 返回的函数是一个函数,没有.then 方法... 2) 调用returnMe 会导致一个函数......这个函数需要被执行
  • 我可以写下面的代码吗?我有点好奇你为什么不直接运行它自己看看?
  • 公平的问题——我想了解它为何如此行事背后的逻辑。显然我运行了这些 sn-ps,但并不真正理解它们为什么不起作用。

标签: javascript function asynchronous promise es6-promise


【解决方案1】:

1) 由于returnMe() 返回一个函数,所以您必须调用该函数。这将返回一个承诺,然后您可以将其与 .then() 一起使用

function returnMe(data){
  return () => {
    return Promise.resolve(data);
  };
};

returnMe("Hello!")().then(msg => console.log(msg));

2) 内部 .then() 使用 promise 解析的数据,但它返回一个新的 promise。所以你可以打电话给.then()

与示例1一样,您需要调用returnMe()返回的函数才能执行内部函数。

function returnMe(data){
    return () => {
      return Promise.resolve(data).then(() => { console.log("Ha!") });
    };
 };
 
 returnMe("Hello!")().then(() => console.log("Done!"));

【讨论】:

  • 谢谢。这帮助我理解了为什么它没有像我预期的那样工作。
猜你喜欢
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多