Javascript—承诺的结果在解决后何时可用?

Javascript—承诺的结果在解决后何时可用?,javascript,promise,Javascript,Promise,在承诺解决后,我们可以对其使用.then方法,它何时运行?它是否在解决问题后立即运行?例如,在下面的示例中,一旦Javascript出现,承诺就“准备就绪”,rite?没有什么大事发生。既然promise中没有进行大的计算,那么为什么.then方法要在所有其他方法之后运行呢?谢谢 let $body = $('#mainBlock'); let checker = true; let testPromise = new Promise( function(resolve, reje

在承诺解决后,我们可以对其使用.then方法,它何时运行?它是否在解决问题后立即运行?例如,在下面的示例中,一旦Javascript出现,承诺就“准备就绪”,rite?没有什么大事发生。既然promise中没有进行大的计算,那么为什么.then方法要在所有其他方法之后运行呢?谢谢

  let $body = $('#mainBlock');
let checker = true;

let testPromise = new Promise(
    function(resolve, reject)
    {
       if(checker)
       {
            resolve();
            $body.append('<p>CodeHasFinished</p>');
       }
    }
);




$body.append('<p>before</p>');

testPromise.then(function(){
     $body.append('<p>middle</p>');
});

$body.append('<p>after</p>');

/*

Result added to body->
CodeHasFinished
before
after
middle

*/
let$body=$('#mainBlock');
让checker=true;
让testPromise=新的承诺(
功能(解析、拒绝)
{
如果(检查)
{
解决();
$body.append(“CodeHasFinished

”); } } ); $body.append(“在

之前”); testPromise.then(函数(){ $body.append(“middle

”); }); $body.append(“在

之后”); /* 结果添加到正文-> 共相完成 之前 之后 中间的 */
根据

2.2.4。在执行上下文堆栈仅包含平台代码之前,不得调用OnCompleted或onRejected。[3.1]

附注3.1各国

这里的“平台代码”是指引擎、环境和承诺实现代码。在实践中,此要求确保OnCompleted和onRejected在调用事件循环之后异步执行,并使用新堆栈

所以,从某种意义上说,你的评论,然后将运行“后一切”是一个很好的假设

考虑以下代码

设i=0;
console.log('a',++i);
Promise.resolve().then(()=>console.log('e',++i)).then(()=>console.log('h',++i)).then(()=>console.log('j',++i));
console.log('b',++i);
Promise.resolve().then(()=>console.log('f',++i)).then(()=>console.log('i',++i));
console.log('c',++i);
然后(()=>console.log('g',++i));
console.log('d',++i)根据

2.2.4。在执行上下文堆栈仅包含平台代码之前,不得调用OnCompleted或onRejected。[3.1]

附注3.1各国

这里的“平台代码”是指引擎、环境和承诺实现代码。在实践中,此要求确保OnCompleted和onRejected在调用事件循环之后异步执行,并使用新堆栈

所以,从某种意义上说,你的评论,然后将运行“后一切”是一个很好的假设

考虑以下代码

设i=0;
console.log('a',++i);
Promise.resolve().then(()=>console.log('e',++i)).then(()=>console.log('h',++i)).then(()=>console.log('j',++i));
console.log('b',++i);
Promise.resolve().then(()=>console.log('f',++i)).then(()=>console.log('i',++i));
console.log('c',++i);
然后(()=>console.log('g',++i));

console.log('d',++i)
.then()
不能保证同步返回结果我应该假设{.then}将在其他所有操作之后运行吗?谢谢你不要在这里“假设”任何事情。如果要使用
Promise
chain,chain
.then()
.catch()
并在传递给
的函数中执行任务。then()
catch()
;如果要使用同步代码,请使用同步代码。为什么要尝试将同步代码与异步代码同步?你想实现什么?.then实际上是“保证”异步调用的-我在引号中加上保证,因为一些“承诺”比其他的更符合要求-参见
中的注释3.1。然后()
不保证同步返回结果我应该假设{.then}将在其他所有操作之后运行吗?谢谢你不要在这里“假设”任何事情。如果要使用
Promise
chain,chain
.then()
.catch()
并在传递给
的函数中执行任务。then()
catch()
;如果要使用同步代码,请使用同步代码。为什么要尝试将同步代码与异步代码同步?你想实现什么?那么实际上是“保证”异步调用-我在引号中加上保证,因为一些“承诺”比其他的更符合要求-参见中的注释3.1