延迟承诺
Putting up delay in promises
所以,我有两个承诺,我想在屏幕上打印,中间有 3 秒的延迟。我将如何实现它。下面是代码。
const promiseOne = new Promise(function(resolve, reject) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve, reject) {
resolve("Good Morning")
});
Promise.all([promiseOne, promiseTwo]).then(function() {
setTimeout(() => {
const response = Promise.all.next();
console.log(response);
}, 3000);
});
您已经非常接近了,您只需要从 Promise.all
的结果中接收值,然后处理该信息,如下所示:
const promiseOne = new Promise(function(resolve) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve) {
resolve("Good Morning");
});
Promise.all([promiseOne, promiseTwo])
.then(function(response) {
setTimeout(() => {
console.log(response);
}, 3000);
});
编辑
根据 OP 给出的说明,他需要的是以下内容:
第一个promise解决后,等待3秒再执行第二个promise。
const promiseOne = new Promise(function(resolve) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve) {
resolve("Good Morning");
});
async function resolveWithDelay(delay = 3000) {
const res1 = await promiseOne;
console.log(res1);
setTimeout(async () => {
const res2 = await promiseTwo;
console.log(res2);
}, delay);
}
resolveWithDelay();
const promiseOne = new Promise(function(resolve, reject) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve, reject) {
resolve("Good Morning")
});
Promise.all([promiseOne, promiseTwo]).then(function(all) {
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(all);
}
, 3000);
});
}).then(console.log)
Return then
中的新 Promise,该 Promise 等待 x
毫秒并解决它。
接下来做任何事情then
如果您只想延迟日志,那么您可以添加 response
参数,如 所述。
但是如果你想延迟 response
从承诺 promiseOne
或 promiseTwo
中的任何一个,那么你应该在各自的承诺中使用 setTimeout(() => resolve("Hello"), 300);
,如下所示。也不要在 Promise.All
.
中使用 setTimeout
根据 ,在 promiseOne
解决后,我更新了对 resolve
promiseTwo
3 seconds
的回答。
这里我把promiseTwo
的resolve
赋值给了全局变量resolvePromiseTwo
,在promiseOne
里面用到resolve
promiseTwo
之后3秒。
注意我在promiseOne
和promiseTwo
之后用了.then
只是为了验证output
。你可以省略两者。
let resolvePromiseTwo = null;
const promiseOne = new Promise(function(resolve, reject) {
resolve("Good Morning")
setTimeout(() => resolvePromiseTwo("Hello"), 3000);
}).then(res => {
console.log('promiseOne resolved');
return res;
});
const promiseTwo = new Promise(function(resolve, reject) {
resolvePromiseTwo = resolve;
}).then(res => {
console.log('promiseTwo resolved');
return res;
});
Promise.all([promiseOne, promiseTwo]).then(function(response) {
console.log('Promise.all');
console.log(response);
});
我建议你使用延时功能。首先,您遍历数组中的每个响应并使用
之间的延迟
const promiseOne = new Promise(function(resolve, reject) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve, reject) {
resolve("Good Morning")
});
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Promise.all([promiseOne, promiseTwo]).then(async function(resps) {
for(let res of resps){
console.log(res);
await delay(3000)
}
});
所以,我有两个承诺,我想在屏幕上打印,中间有 3 秒的延迟。我将如何实现它。下面是代码。
const promiseOne = new Promise(function(resolve, reject) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve, reject) {
resolve("Good Morning")
});
Promise.all([promiseOne, promiseTwo]).then(function() {
setTimeout(() => {
const response = Promise.all.next();
console.log(response);
}, 3000);
});
您已经非常接近了,您只需要从 Promise.all
的结果中接收值,然后处理该信息,如下所示:
const promiseOne = new Promise(function(resolve) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve) {
resolve("Good Morning");
});
Promise.all([promiseOne, promiseTwo])
.then(function(response) {
setTimeout(() => {
console.log(response);
}, 3000);
});
编辑 根据 OP 给出的说明,他需要的是以下内容:
第一个promise解决后,等待3秒再执行第二个promise。
const promiseOne = new Promise(function(resolve) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve) {
resolve("Good Morning");
});
async function resolveWithDelay(delay = 3000) {
const res1 = await promiseOne;
console.log(res1);
setTimeout(async () => {
const res2 = await promiseTwo;
console.log(res2);
}, delay);
}
resolveWithDelay();
const promiseOne = new Promise(function(resolve, reject) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve, reject) {
resolve("Good Morning")
});
Promise.all([promiseOne, promiseTwo]).then(function(all) {
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(all);
}
, 3000);
});
}).then(console.log)
Return then
中的新 Promise,该 Promise 等待 x
毫秒并解决它。
接下来做任何事情then
如果您只想延迟日志,那么您可以添加 response
参数,如
但是如果你想延迟 response
从承诺 promiseOne
或 promiseTwo
中的任何一个,那么你应该在各自的承诺中使用 setTimeout(() => resolve("Hello"), 300);
,如下所示。也不要在 Promise.All
.
setTimeout
根据 promiseOne
解决后,我更新了对 resolve
promiseTwo
3 seconds
的回答。
这里我把promiseTwo
的resolve
赋值给了全局变量resolvePromiseTwo
,在promiseOne
里面用到resolve
promiseTwo
之后3秒。
注意我在promiseOne
和promiseTwo
之后用了.then
只是为了验证output
。你可以省略两者。
let resolvePromiseTwo = null;
const promiseOne = new Promise(function(resolve, reject) {
resolve("Good Morning")
setTimeout(() => resolvePromiseTwo("Hello"), 3000);
}).then(res => {
console.log('promiseOne resolved');
return res;
});
const promiseTwo = new Promise(function(resolve, reject) {
resolvePromiseTwo = resolve;
}).then(res => {
console.log('promiseTwo resolved');
return res;
});
Promise.all([promiseOne, promiseTwo]).then(function(response) {
console.log('Promise.all');
console.log(response);
});
我建议你使用延时功能。首先,您遍历数组中的每个响应并使用
之间的延迟const promiseOne = new Promise(function(resolve, reject) {
resolve("Hello")
});
const promiseTwo = new Promise(function(resolve, reject) {
resolve("Good Morning")
});
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Promise.all([promiseOne, promiseTwo]).then(async function(resps) {
for(let res of resps){
console.log(res);
await delay(3000)
}
});