承诺后的返回值[重复]
Posted
技术标签:
【中文标题】承诺后的返回值[重复]【英文标题】:return value after a promise [duplicate] 【发布时间】:2014-05-21 23:39:29 【问题描述】:我有一个 javascript 函数,我想返回在 return 方法之后得到的值。 比解释更容易看到
function getValue(file)
var val;
lookupValue(file).then(function(res)
val = res.val;
return val;
用承诺来做到这一点的最佳方式是什么。据我了解,return val
将在 lookupValue 完成之前返回,但我不能return res.val
因为那只是从内部函数返回。
【问题讨论】:
@OneKitten,您链接到的问题不是使用承诺,而是将函数作为回调传递,我认为这完全不同。 同一个概念,promise 仍然是异步的。 ***.com/q/22536385/1348195 我也需要一个答案。所以基本上不可能编写一个带有承诺的函数,它返回console.log(getValue('myFile.txt'));
函数调用的结果?如果这是真的,那就糟透了,因为有时甚至这个调用也是不必要的样板:getValue('myFile.txt').then((val) => console.log(val) );
实际答案: softwareengineering.stackexchange.com/a/350041/171994
【参考方案1】:
最好的方法是使用 promise 返回函数,就像这样
lookupValue(file).then(function(res)
// Write the code which depends on the `res.val`, here
);
调用异步函数的函数不能等到异步函数返回值。因为,它只是调用 async 函数并执行其中的其余代码。因此,当异步函数返回一个值时,调用它的同一个函数不会接收到它。
因此,一般的想法是在异步函数本身中编写依赖于异步函数返回值的代码。
【讨论】:
你没有错,但是你的解决方案违反了封装原则。调用 getValue(...) 的对象或函数不应该也不应该知道函数 lookupValue(...)。这样,如果 getValue(...) 中的确切过程发生变化,则不需要更新依赖它的函数。【参考方案2】:使用遵循以下原则的模式:
function getValue(file)
return lookupValue(file);
getValue('myFile.txt').then(function(res)
// do whatever with res here
);
(虽然这有点多余,但我相信你的实际代码更复杂)
【讨论】:
你能举个lookupValue
的例子吗?以上是关于承诺后的返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章