背景
我正在努力学习承诺,我有一个承诺链,我想改进。
问题
在学习如何连锁承诺的同时,我不明白为什么有人宁愿回报承诺,而不愿回报承诺的价值。
以下面的示例为例,它使用了诺言链接:
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()
方法的结果,而不是返回一个承诺,那么我可能会执行以下操作:
let myObj = new MyClass();
let str = myObj.getInfo();
writeOutput(FILE_NAME, str)
.then(console.log(FILE_NAME + " complete"))
.catch(error => console.error(error));
问题
所以正如你所看到的,我有点困惑。
getInfo()
实际上是异步的,是否有可能实现与我的第二个代码示例中的代码类似的代码?发布于 2017-01-18 04:22:13
只有在调用该函数时该值立即可用时,才能从某个函数返回一个值(在事件循环的相同勾号上)。请记住,return
是同步的。
如果它现在不可用,那么您只能返回一个承诺(或者您可以使用回调,但这里您专门询问承诺)。
有关更详细的解释,请参阅我不久前为一个问题编写的答案,该问题询问如何从某个函数返回AJAX调用的结果。我解释了为什么不能返回值,但可以返回承诺:
这是另一个相关的答案--它因某些原因被否决了,但我认为它解释了你问她的一个类似的问题:
发布于 2017-01-18 04:22:48
我不明白为什么有人宁愿回报承诺,而不愿回报它的价值。
因为你还没有这个价值。
考虑到
getInfo()
实际上是异步的,是否有可能实现与我的第二个代码示例中的代码类似的代码?
如果它是异步的,它必须返回一个承诺。
避免then
调用(但仍然使用并产生承诺)的语法由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("…");
发布于 2017-01-18 04:23:18
一个承诺的目的是说:“数据会在某个时候出现,现在继续你的编码”,这样你的页面就不会卡住了。基本上,您是使用承诺,例如,从服务器加载一些东西。
https://stackoverflow.com/questions/41719024
复制相似问题