假设我有以下内容Promise:
function doSomethingAsynchronous() {
return new Promise((resolve) => {
const result = doSomeWork();
setTimeout(() => {
resolve(result);
}), 100);
});
}
Run Code Online (Sandbox Code Playgroud)
在什么时候被doSomeWork()称为?它Promise是在建造之后立即建造的吗?如果没有,是否还有一些我需要明确做的事情来确保Promise运行的主体?
该提议建议async功能可以使用发动机功能,虽然我在ES2017规范中找不到这方面的确认.
此外,当发电机在原型铬/ Node.js的变得一团糟,async似乎功能不受到影响,这表明GeneratorFunction不使用AsyncFunction,至少直接:
Object.getPrototypeOf((function * () {}).prototype).next = null;
(async () => {
return await Promise.resolve(1);
})()
.then(console.log);
Run Code Online (Sandbox Code Playgroud)
为什么说async/ await现有的本地实现的工作?
这些实现是否比Promise使用提案建议的/ generator函数方法更高效,并且通常在Babel和TypeScript中实现?
对于以下代码
function inner () {
new Promise(function(resolve,reject){
resolve()
}).then(function(){
console.log('Inner Promise')
})
}
function outer() {
return new Promise(function(resolve, reject){
resolve()
inner()
})
}
outer().then(function(data) {
console.log('Outer Promise')
})
Run Code Online (Sandbox Code Playgroud)
输出是
Inner Promise
Outer Promise
Run Code Online (Sandbox Code Playgroud)
我认为外部决心将是第一个进入JS Message Queue,然后是内部解析.然而,JS事件循环首先触发内部解析,然后是外部解析.
Promise在内部解决了什么?