我正在尝试执行以下操作,但它无法正常工作。如何调整代码以使.then和.done之间有延迟?
myService.new(a).then(function(temp) {
setTimeout(function() {
return myService.get(a, temp);
}, 60000);
}).done(function (b) {
console.log(b);
});
答案 0 :(得分:1)
您可以创建一个简单的延迟函数,该函数返回一个promise并在您的promise链中使用它:
function delay(t, val) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(val);
}, t);
});
}
myService.new(a).then(function(temp) {
return delay(60000, temp);
}).then(function(temp) {
return myService.get(a, temp);
}).then(function (b) {
console.log(b);
});
您还可以使用Promise
方法扩充.delay()
原型(有些人承诺像Bluebird这样的库已经内置了)。请注意,此版本的延迟会传递给链中下一个链接的值:
Promise.prototype.delay = function(t) {
return this.then(function(val) {
return delay(t, val);
});
}
然后,你可以这样做:
myService.new(a).delay(60000).then(function(temp) {
return myService.get(a, temp);
}).then(function (b) {
console.log(b);
});
答案 1 :(得分:0)
您可以在.delay()
创建一个Promise.prototype
函数集,该函数会返回一个具有原始承诺值的新Promise
。
Promise.prototype.delay = function(t) {
return this.then(function(data) {
return new Promise(function(resolve) {
setTimeout(resolve, t || 0, data);
})
})
};
Promise.resolve(123)
.delay(6000)
.then(function(data) {
console.log(data)
});
答案 2 :(得分:0)
jfriend00的方法略有改进,避免了需要传递解析后的值:
function delay(t) {
return (val) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(val), t)
})
}
}
可以像这样使用:
myService.new(a)
.then(delay(60000))
.then(function(temp) {
return myService.get(a, temp);
}).then(function (b) {
console.log(b);
});