0

所以,我有两个承诺,我想在屏幕上打印,中间有 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);
});

4

4 回答 4

0

您非常接近,您只需要从结果中接收值,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();

于 2020-07-28T04:28:49.540 回答
0

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)

在 中返回新的 Promise then,该 Promise 等待x毫秒并解决它。

接下来做任何事情then

于 2020-07-28T04:32:23.050 回答
0

如果您只想延迟日志,则可以按照@Daniel Rodríguez Mezaresponse的说明添加参数。

但是,如果您想延迟response任何一个承诺promiseOne,或者promiseTwo您应该setTimeout(() => resolve("Hello"), 300);在各自的承诺中使用,如下所示。也不要setTimeout在里面使用Promise.All

根据OP 的评论,我已经更新了解决resolve promiseTwo 3 seconds后的答案promiseOne

在这里,我分配resolve了3 秒后在内部使用的promiseTwo全局变量。resolvePromiseTwopromiseOneresolve promiseTwo

注意我已经使用.thenafterpromiseOne并且promiseTwo只是为了验证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);
});

于 2020-07-28T04:35:45.487 回答
0

我建议你使用延迟功能。首先,您循环遍历数组中的每个响应并使用两者之间的延迟

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)
   }   
});

于 2020-07-28T04:38:53.017 回答