为了账号安全,请及时绑定邮箱和手机立即绑定

延迟承诺,

延迟承诺,

慕哥6287543 2022-12-09 16:44:00
所以,我有两个承诺,我想在屏幕上打印,中间有 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 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

我建议你使用延迟功能。首先你遍历数组中的每个响应并使用它们之间的延迟


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)

   }   

});


查看完整回答
反对 回复 2022-12-09
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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


查看完整回答
反对 回复 2022-12-09
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

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

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

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

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

注意我已经使用.thenafterpromiseOnepromiseTwojust to verify 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);

});


查看完整回答
反对 回复 2022-12-09
?
郎朗坤

TA贡献1921条经验 获得超9个赞

你已经非常接近了,你只需要从的结果中接收值,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 resolve后,等待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();


查看完整回答
反对 回复 2022-12-09
  • 4 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号