代码之家  ›  专栏  ›  技术社区  ›  cdarwin

“开始承诺”当我想

  •  0
  • cdarwin  · 技术社区  · 6 年前

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

    所以,下面的代码打印“Promise executed”和两个日期。我想让代码打印第一个日期,然后是“承诺执行”,最后一个日期。

    我应该采取什么方法?

    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 回复  |  直到 6 年前
        1
  •  3
  •   Shant Marouti    6 年前

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

    function doWork() {
        return new Promise(function(resolve) {
            console.log('Promise executed');
            resolve(1);
        });
    }
    
    setTimeout(function() {
        console.log(new Date());
        doWork().then(function() {
            console.log('All done');
            console.log(new Date());
        });
    }, 1000);
    
        2
  •  1
  •   CD..    6 年前

    delay 功能,例如:

    const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
    
    delay(1000).
      then(() => console.log(new Date())).
      then(() => console.log("Promise executed"))
        3
  •  0
  •   TLP    6 年前

    new Promise(resolve=>setTimeout(resolve,1000))
       .then(()=>{
           console.log("Promise executed")
        })
    
        4
  •  0
  •   Rainer Plumer    6 年前

    按要求打印日期。

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