我愿意的时候“承诺”

时间:2018-08-22 16:01:23

标签: javascript es6-promise

我想在一段时间后开始一些工作,并且希望这项工作通过Promise返回其价值。

不幸的是,当您建立承诺时,承诺的主体会立即执行。

因此,以下代码将打印“已执行承诺”,然后打印两个日期。我希望代码先打印第一个日期,然后打印“承诺执行”,然后打印最后一个日期。

我应该采用哪种方法?

JS代码:

let p = new Promise(function(resolve) {
    console.log("Promise executed");
    resolve(1);
});
		
		
setTimeout(function() {
    console.log(new Date());
    p.then(function() { 
        console.log("All done"); 
        console.log(new Date());
    });
}, 1000);

4 个答案:

答案 0 :(得分:3)

您可以通过将承诺包装到函数中来延迟承诺的创建

file.choose()

答案 1 :(得分:1)

您可以使用Promise创建delay函数,例如:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms))

delay(1000).
  then(() => console.log(new Date())).
  then(() => console.log("Promise executed"))

答案 2 :(得分:0)

在定时器中包装计时器,然后在解决了计时器承诺后运行代码,如下所示:

new Promise(resolve=>setTimeout(resolve,1000))
   .then(()=>{
       console.log("Promise executed")
    })

答案 3 :(得分:0)

根据要求打印日期。

var printDates = () => {
    console.log('first date:', new Date());
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log("Promise executed");
            setTimeout(() => {
                console.log('second date:', new Date());
                resolve('All done');
            }, 2000);
        }, 2000);
    });
}