在Nodejs中返回Promise结果而不是Promise

背景

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

问题

在学习如何链接承诺的同时,我不明白为什么有人愿意回报承诺而不是回报它的价值。

以下面的示例使用promise链:

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");
        });
}

在这里我必须连锁2次。 但是,如果我直接从方法getInfo()返回结果而不是返回Promise,那么我可能会执行如下操作:

let myObj = new MyClass();

let str = myObj.getInfo();

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

问题

所以你可以看到我有点困惑。

  • 鉴于getInfo()实际上是异步的,是否可以实现类似于我的第二个代码示例中的代码的代码?
  • 如果可能的话,这是个好主意吗? 你会怎么做?

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

    如果它没有立即可用,那么你只能返回一个承诺(或者你可以使用回调,但在这里你是专门询问承诺)。

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

  • jQuery:在Ajax调用成功后返回数据
  • 这是另一个相关的答案 - 由于某种原因它被降低了,但我认为它解释了一个类似的问题,你问她:

  • 从promise块返回函数中的值

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

    因为你还没有价值。

    鉴于getInfo()实际上是异步的,是否可以实现类似于我的第二个代码示例中的代码的代码?

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

    避免then调用(但仍然使用并产生承诺)的语法可以通过async / await

    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("…");
    

    承诺的目的是说:“数据将在某个时间出现,只需继续进行编码”,以便您的页面不会被卡住。 基本上你使用Promises来例如从服务器加载一些东西。

    链接地址: http://www.djcxy.com/p/55351.html

    上一篇: Return Promise result instead of Promise in Nodejs

    下一篇: Node; Q Promise delay