背景
我正在尝试学习 Promise,并且我有一个想要改进的 Promise 链。
Problem
在学习如何链接承诺时,我不明白为什么有人宁愿返回承诺而不是返回它的值。
以下面的示例使用了 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");
});
}
这里我必须链接两次。但是如果我直接从方法返回结果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调用成功后返回数据 https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success/5316805#5316805
这是另一个相关的答案 - 由于某种原因它被否决了,但我认为它解释了您询问她的类似问题:
- 从 Promise 块返回函数值 https://stackoverflow.com/questions/40785769/return-value-in-function-from-a-promise-block/40785901#40785901
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)