具有setTimeout解析的JavaScript承诺

问题描述 投票:1回答:2

我想按时间顺序打印3条消息,其中每条消息在显示前一条消息后的n秒后显示。要求使用JavaScript并使用Promises实现此功能,我编写了一个名为printLater的函数,该函数返回一个Promise,该Promise利用setTimeout来实现阻止/等待机制,如下所示:

let printLater = (message, delay) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(message);
            resolve();
        }, delay);        
    })
}

然后,我尝试使用3个Promise按顺序打印消息并使用延迟。

printLater('first message, after 2 seconds from start of program', 2_000)
    .then(printLater('second message, after 5 seconds after first message is displayed', 5_000))
    .then(printLater('third message, after 1 second after second message is displayed', 1_000));

所需的输出是:

first message, after 2 seconds from start of program
second message, after 5 seconds after first message is displayed
third message, after 1 second after second message is displayed

但是实际输出是:

third message, after 1 second after second message is displayed
first message, after 2 seconds from start of program
second message, after 5 seconds after first message is displayed

鉴于我正在为setTimeout指定的功能内进行解析,所以我试图理解为什么顺序不正确。

我想按时间顺序打印3条消息,其中每条消息在显示前一条消息的n秒后显示。要求使用JavaScript并使用Promises来实现,...

javascript promise
2个回答
2
投票

您可以创建另一个函数来返回printLater()的包装器:


0
投票

Hi,Promise链接不正确

© www.soinside.com 2019 - 2024. All rights reserved.