背景
我正在努力学习承诺,我有一个我希望改进的承诺链.
问题
在学习如何链接承诺时,我不明白为什么有人宁愿回复承诺而不是回报它的价值.
以下示例使用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
原文地址:https://codeday.me/bug/20190823/1701683.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。