什么时候应该使用Q.defer,何时只使用Promise.resolve / reject?

时间:2016-02-10 10:19:31

标签: javascript node.js promise q deferred

我正在使用nodejs,并且想知道何时应该使用Q延迟,何时只使用Promise.resolve / reject?

我看到了很多这两种例子,例如:

// with Q defer
fucntion oneWay(myVal) {
  var deffered = Q.defer();
  if (myVal < 0) {
    deffered.reject(new Error('nope'));
  } else {
    deffered.resolve('yay');
  }
  return deffered.promise;
}

// native Promise
fucntion orAnother(myVal) {
  if (myVal < 0) {
    return Promise.reject(new Error('nope'));
  } else {
    return Promise.resolve('yay');
  }
}

有什么区别,什么时候使用difer是一个好习惯?

Promise.resolve / reject(native)和Q.resolve / reject之间有什么区别吗?它们都返回了promise,但是当我查看节点控制台中的返回值时它看起来有所不同。

由于

1 个答案:

答案 0 :(得分:2)

没有理由使用Promise构造函数,或者 - worse - 在您不需要时延迟使用。Promise constructor with reject call vs throwing error。您的功能中没有任何异步,因此您不需要(也不应该使用)回调。

只需访问Promise.resolve / Promise.reject或他们的Q对应人,直接构建价值承诺。它无论如何都要简短得多。

另见Q.Promise

  

何时使用延迟是一种好习惯?

从不。即使在Q,您也应该使用{{3}}。

  

Promise(原生)和Q之间有什么区别吗?当我查看节点控制台中的返回值时,它们看起来有所不同。

嗯,他们是不同的类,具有不同的属性,而Q承诺确实有更多的方法。
虽然它们的工作方式相同,但彼此之间完全可以互操作。