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