在为某些应用程序上下文编写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构造函数中不会不执行直到以后(即,在您希望执行的确切时间),这将为我节省很多样板代码。
答案 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;
});
}