【问题标题】:Create an empty JavaScript Promise [duplicate]创建一个空的 JavaScript Promise [重复]
【发布时间】:2016-05-04 17:58:51
【问题描述】:

我目前正在尝试创建一个工具来链接动态数量的承诺。这是我的代码:

// NB: This is made using angular's $q, but this applies to anything else
promiseChain = function(array, passedPromise) {
    let chain = $q((resolve, reject) => resolve());
    for (let elem of array)
      chain = chain.then(_ => passedPromise(elem));
    return chain;
};

这是我的测试代码:

// This returns a timeout wrapped in a promise
let testFn = function(s) {
  return $timeout(function() {
    console.log(s);
  }, 500);
};

let promise = makePromiseChain([1,2,3,4,5,6,7,8,9], testFn);
promise.then(_ => console.log('finished'));

这行得通。但是,让我讨厌的是promiseChain的第一行:

$q((resolve, reject) => resolve())

没有其他方法可以创建一个空的、自我解决的承诺,或者启动链吗?我觉得使用这段代码很脏。 :/

【问题讨论】:

  • 我们通常使用Array.prototype.reduce() - stackoverflow.com/a/25730751/3478010
  • 你的passedPromise 必须是一个函数,而不是一个promise,否则passedPromise(elem) 会抛出。

标签: javascript angularjs promise angular-promise


【解决方案1】:

您可以简单地使用$q.when$q.resolve

chain = $q.resolve(); // or the alias $q.when()

ES6 承诺解析是 Promise.resolve(),因此使用 resolve 而不是 when 可能对下一个查看代码的人来说很容易。

【讨论】:

    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    相关资源
    最近更新 更多