首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nodejs中的返回承诺结果而不是承诺

Nodejs中的返回承诺结果而不是承诺
EN

Stack Overflow用户
提问于 2017-01-18 12:07:54
回答 4查看 5.3K关注 0票数 3

背景

我正在努力学习承诺,我有一个承诺链,我想改进。

问题

在学习如何连锁承诺的同时,我不明白为什么有人宁愿回报承诺,而不愿回报承诺的价值。

以下面的示例为例,它使用了诺言链接:

代码语言:javascript
运行
复制
let myObj = new MyClass();

myObj.getInfo()
    .then(result => writeOutput(FILE_NAME, result))
    .then(console.log(FILE_NAME + " complete"))
    .catch(error => console.error(error));

class MyClass{

    getInfo() {
        return new Promise(function(fulfil, reject) {
            fulfill("I like bananas");
        });
}

在这里我要链两次。但是,如果我要直接返回getInfo()方法的结果,而不是返回一个承诺,那么我可能会执行以下操作:

代码语言:javascript
运行
复制
let myObj = new MyClass();

let str = myObj.getInfo();

writeOutput(FILE_NAME, str)
    .then(console.log(FILE_NAME + " complete"))
    .catch(error => console.error(error));

问题

所以正如你所看到的,我有点困惑。

  1. 考虑到getInfo()实际上是异步的,是否有可能实现与我的第二个代码示例中的代码类似的代码?
  2. 如果有可能,会不会是个好主意?你会怎么做?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-18 12:22:13

只有在调用该函数时该值立即可用时,才能从某个函数返回一个值(在事件循环的相同勾号上)。请记住,return是同步的。

如果它现在不可用,那么您只能返回一个承诺(或者您可以使用回调,但这里您专门询问承诺)。

有关更详细的解释,请参阅我不久前为一个问题编写的答案,该问题询问如何从某个函数返回AJAX调用的结果。我解释了为什么不能返回值,但可以返回承诺:

这是另一个相关的答案--它因某些原因被否决了,但我认为它解释了你问她的一个类似的问题:

票数 2
EN

Stack Overflow用户

发布于 2017-01-18 12:22:48

我不明白为什么有人宁愿回报承诺,而不愿回报它的价值。

因为你还没有这个价值。

考虑到getInfo()实际上是异步的,是否有可能实现与我的第二个代码示例中的代码类似的代码?

如果它是异步的,它必须返回一个承诺。

避免then调用(但仍然使用并产生承诺)的语法由await实现。

代码语言:javascript
运行
复制
async function writeInfo(FILE_NAME) {
    const myObj = new MyClass();
    try {
        const str = await myObj.getInfo();
        await writeOutput(FILE_NAME, str);
        console.log(FILE_NAME + " complete");
    } catch (error) {
        console.error(error);
    }
}
writeInfo("…");
票数 2
EN

Stack Overflow用户

发布于 2017-01-18 12:23:18

一个承诺的目的是说:“数据会在某个时候出现,现在继续你的编码”,这样你的页面就不会卡住了。基本上,您是使用承诺,例如,从服务器加载一些东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41719024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档