javascript - q- 何时返回,如 promise 链中的 "defer.resolve(myData); return defer.promise;"VS 只是 "return myData"

标签 javascript promise q deferred resolve

我一直在尝试在我的 Node.js 服务器上编写更好的代码,并在阅读了如下一些博客文章后:

我仍然不确定我是否以“正确的方式”沿着 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 ,您可以稍后更改函数的实现以异步计算或检索结果。

两个提示:

  1. 在情况 2 中您没有使用 Promise,因此不要调用您的函数 promise
  2. 在第一种情况下,您只需 return q("hi"); 将文字包装在 Promise 中。

关于javascript - q- 何时返回,如 promise 链中的 "defer.resolve(myData); return defer.promise;"VS 只是 "return myData",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771100/

相关文章:

javascript - 从 firebase 的 onCall 函数返回 promise 的正确方法?

javascript - Promises : q. all() 混契约(Contract)步和异步功能

promise - q.js : Is it possible to know if a promise has resolved/rejected or not

javascript - 从 document.cookie 中隐藏 cookie

javascript - Reactjs:将侧边栏组件导入到不同的页面

javascript - Bootstrap 开关无法处理 Ajax 数据

javascript - OWL Carousel owl-buttons 问题

angularjs - Foreach 进入带有 $http promise 的 foreach

Scala Future[Option[T]] 解包

node.js - 链式顺序任务