javascript – 在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()实际上是异步的,是否有可能实现与我的第二个代码示例中的代码类似的代码?
>如果有可能,那会是个好主意吗?你会怎么做?

解决方法:

如果在调用该函数时该值立即可用(在事件循环的同一刻度上),则只能从某个函数返回一个值.请记住,返回是同步的.

如果它不可用,那么你只能返回一个承诺(或者你可以使用回调,但在这里你特别询问承诺).

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

> jQuery: Return data after ajax call success

这是另一个相关的答案 – 由于某种原因它被推翻但我认为它解释了一个类似的问题,你问她:

> Return value in function from a promise block

相关文章

最后的控制台返回空数组.控制台在ids.map函数完成之前运行va...
我正在尝试将rxJava与我已经知道的内容联系起来,特别是来自J...
config.jsconstconfig={base_url_api:"https://douban....
我正在阅读MDN中的javascript,并且遇到了这个谈论承诺并且不...
config.jsconstconfig={base_url_api:"https://douban....
这是我的代码main.cpp:#include<string>#include<...