我一直在尝试在我的 Node.js 服务器上编写更好的代码,并在阅读了如下一些博客文章后:
- http://www.codelord.net/2015/09/24/ $q-dot-defer-youre-doing-it-wrong/( Angular 特定但概念相同)
- http://bahmutov.calepin.co/linking-promises.html
我仍然不确定我是否以“正确的方式”沿着 promise 链返回数据。
我无法判断何时适合返回或传递数据,这样的 promise
案例1
var promise = function () {
var defer = q.defer();
var myData = "hi"
defer.resolve(myData);
return d.promise;
};
或者像这样。
案例2
var promise = function () {
var myData = "hi"
return myData;
};
我假设,如果我知道在 promise 链不可能中断的情况下会返回某些内容,则使用情况2,但如果它们是一个更改它可能会失败(即它从网络调用返回数据但用户处于离线状态),然后使用情况 1,以便它可以处理这两种情况。这是正确的还是我对这个流程/流程的工作原理有误解。
最佳答案
在这两种情况下,您都会返回立即已知或计算出的结果,而在第一种情况下您将其包装在 promise 中。您是否想要这样做取决于如果结果是异步计算的,它对于函数的调用者是否应该是透明的。如果您返回一个 promise ,您可以稍后更改函数的实现以异步计算或检索结果。
两个提示:
- 在情况 2 中您没有使用 Promise,因此不要调用您的函数
promise
。 - 在第一种情况下,您只需
return q("hi");
将文字包装在 Promise 中。
关于javascript - q- 何时返回,如 promise 链中的 "defer.resolve(myData); return defer.promise;"VS 只是 "return myData",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771100/