Javascript Promise是实现异步编程的一种技术吗?

Javascript Promise是实现异步编程的一种技术吗?,javascript,node.js,asynchronous,es6-promise,Javascript,Node.js,Asynchronous,Es6 Promise,我试着去理解 来自google源代码,还没有发现它是如何异步执行代码的 我对异步函数的理解是,它下面的代码可以在它之前一次解析 例如: setTimeout(()=>{console.log("in")}, 5000); console.log("out"); // output: // out // in 第二行在第一行之前填充,因此我认为setTimeout是一种异步技术。但是请参见Promise的代码: let p = new Promise((resolve, reject)=

我试着去理解 来自google源代码,还没有发现它是如何异步执行代码的

我对异步函数的理解是,它下面的代码可以在它之前一次解析

例如:

setTimeout(()=>{console.log("in")}, 5000);
console.log("out");

// output:
// out
// in
第二行在第一行之前填充,因此我认为
setTimeout
是一种异步技术。但是请参见
Promise
的代码:

let p = new Promise((resolve, reject)=>{console.log('in'); resolve(1);});
console.log("out");

//in
//out
这个代码块实际上是逐行执行的,如果
console.log('in')
是一个耗时的操作,第二行将被阻止,直到解决为止

我们通常这样使用
Promise

(new Promise(function1)).then(function2).then(function3)

这是否意味着:
Promise
只是用来保证在function1之后执行function2,它不是实现
异步的技术,而是实现
同步的方法(function1、function2、function3依次执行)。Promise只是描述一个还不存在的值的一种方式,但我会晚一点到达。您可以附加
。然后将
处理程序附加到它,以便在发生这种情况时得到通知

这是否意味着:Promise只是用来保证function2在function1之后执行

没错,即使function1异步返回它的值(通过承诺),function2也只会在该值存在时运行

它不是一种实现“异步”的技术,而是一种实现“同步”执行的方法

不是真的。将已经存在的值包装到承诺中是没有意义的。将“异步”回调的回调包装成承诺是有意义的。这就是说,承诺本身并不表示它解析的值是在同步还是异步maner中检索的

function retrieveStuffAsynchronously()函数{
//direclty返回一个Promise,该Promise将在以下情况下使用检索到的值进行解析:
返回新承诺((解决、拒绝)=>{
//直接执行此操作,异步操作将在下面启动:
setTimeout(()=>{//第一个异步代码,在某个时候执行
解析(“值”);//异步解析
}, 1000);
});
}
console.log(retrieveStuffAsynchronously());//确实会立即返回一个承诺,但是该承诺仍然悬而未决
retrieveStuffAsynchronously().then(console.log)