我正在尝试学习承诺,并且我有一个希望改进的承诺链。
在学习如何链接承诺时,我看不到为什么有人愿意返回承诺而不是返回其价值。
以下面的示例为例,该示例使用了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,则可能会执行以下操作:
getInfo()
let myObj = new MyClass(); let str = myObj.getInfo(); writeOutput(FILE_NAME, str) .then(console.log(FILE_NAME + " complete")) .catch(error => console.error(error));
如您所见,我有些困惑。
如果调用某个函数时该值立即可用(在事件循环的同一滴答处),则只能从该函数返回一个值。请记住,这return是同步的。
return
如果无法立即使用它,那么您只能返回一个承诺(或者您可以使用回调,但是在此专门询问承诺)。
有关更详细的说明,请参见我前一段时间写的一个答案,该问题询问如何从某个函数返回AJAX调用的结果