创建处于休眠状态的Javascript许诺?

时间:2018-08-15 05:09:09

标签: javascript promise deferred-execution

在为某些应用程序上下文编写Promises时,我面临的问题之一是希望将Promise中代码的任何执行推迟到以后。当我有 manager 个对象维护一组Promises以便以后执行时,这种情况经常发生。为了解决这个问题,我最终创建了 builder 函数,这些函数在需要执行Promise时由 manager 对象调用。这很乏味,并导致大量“沸腾”代码。

例如,这是我的Promise builder 功能之一:

this._buildPollingPromise = function(ethTransWaiter) {
    return new Promise(function(resolve, reject) {

        // Execute the function that builds a polling method promise.
        ethTransWaiter.confirmTransPromiseBuilder.buildPromise()
        .then(function(result) {
            ...
        })
        .then(function(ignoreResult) {
            resolve(ethTransWaiter.isConfirmed);
        })
        .catch(function(err)
        {
            // Reject the promise with the error received.
            reject(err);
        });
    });
}

必须延迟执行 ethTransWaiter.confirmTransPromiseBuilder.buildPromise()方法的执行,因为如果在创建Promise时执行该方法,它将失败,因为条件尚未成功执行。

因此,我想知道是否有内置方法或NPM软件包创建或帮助创建可以在休眠状态下构建的Promises,以便函数中的代码位于Promise构造函数中不会执行直到以后(即,在您希望执行的确切时间),这将为我节省很多样板代码。

1 个答案:

答案 0 :(得分:0)

可能是这样吗?

function wait(ms) {
  return new Promise(function (resolve) {
    setTimeout(resolve, ms);
  });
}

this._buildPollingPromise = function (ethTransWaiter) {

  var waitUntilLater = wait(3000);

  var buildPromise = new Promise(function (resolve, reject) {

    // Execute the function that builds a polling method promise.
    ethTransWaiter.confirmTransPromiseBuilder.buildPromise()
      .then(function (result) {
        //...
      })
      .then(function (ignoreResult) {
        resolve(ethTransWaiter.isConfirmed);
      })
      .catch(function (err) {
        // Reject the promise with the error received.
        reject(err);
      });
  });

  return Promise.all([waitUntilLater, buildPromise]).then(function (results) {
    return results;
  });

}