如果我理解诺言正确,则不应反转以下输出。
async function funcA() {
console.log("executing funcA");
await new Promise(function() {
console.log("inside new promise")
});
}
function funcB() {
console.log("executing funcB");
}
funcA();
funcB();
//Outputs the following
"executing funcA"
"inside new promise"
"executing funcB"
这与同步执行funcA有何不同
答案 0 :(得分:3)
不,async
+ await
只是用于链接promise的语法糖,因此,如果您不await
进行任何操作,您仍会同步执行。
例如,使用以下功能:
async function foo() {
const users = await database.users.list();
const pets = await database.pets.findFor(users);
console.log("These are the application's users: ", users);
console.log("And all their pets: ", pets);
}
基本上是这样编译的:
function foo() {
return new Promise(function(resolve, reject) {
try {
var users;
var pets;
database.users.list()
.then(function (us) {
users = us;
return database.pets.findFor(users);
})
.then(function (ps) {
pets = ps;
console.log("These are the application's users: ", users);
console.log("And all their pets: ", pets);
})
.then(resolve, reject);
} catch (error) {
reject(error);
}
});
}
如果您查看Promise
constructor的文档,您会发现执行程序(您赋予它的功能)是立即(即同步)执行的。 / p>
因此,回到您的示例,您的“异步”功能将在幕后这样实现:
function funcA() {
return new Promise(function (resolve, reject) {
try {
console.log("executing funcA");
} catch (error) {
reject(error);
}
});
}
因此,console.log
将被同步执行。
答案 1 :(得分:1)
funcA中没有等待会暂停执行,因此funcA将被同步执行。
异步函数可以包含一个await表达式,该表达式会暂停 执行异步功能并等待传递的Promise 解决,然后恢复异步函数的执行和 返回解析值。