微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐