我正在尝试学习异步/等待创建示例代码的承诺
<html>
<head>
<script>
async function getTested() {
alert("line");
let pp = await test1();
alert(pp); //expected to print hello
}
async function test1 () {
alert("line 9");
let promise = await test2();
alert(promise); //expected to print hello
return promise;
}
function test2 () {
alert("line 15");
let promise = new Promise.resolve('hello');
alert(promise);
return promise;
}
</script>
</head>
<body onload="getTested()"></body>
</html>
在这里,我使用async / await来解决我所承诺的承诺,除了在test1和getTested中打印'hello'之外。我在这里做什么错?
答案 0 :(得分:2)
new Promise.resolve
<-
那里有问题。
初始化并返回Promise对象。
let promise = new Promise(function(r) {
r("hello");
});
或者,您可以遵循与您想遵循的类似方法:
Promise.resolve("hello");
async function getTested() {
let pp = await test1();
console.log(pp); //expected to print hello
}
async function test1() {
let promise = await test2();
console.log(promise); //expected to print hello
return promise;
}
function test2() {
return Promise.resolve("hello");
}
getTested()
答案 1 :(得分:0)
您可以使用Promise.resolve(value)
将test3函数更改为
function test2 () {
alert("line 15");
let promise = Promise.resolve('hello');
alert(promise);
return promise;
}
答案 2 :(得分:0)
如果您没有将new
放在Promise.resolve('hello')
之前,它就可以工作。
我已经在您的字符串中添加了一些字符串,因此我们可以看到哪个函数正在输出每个字符串。这可以帮助您更清楚地了解事情发生的顺序。
我使用的是console.log
而不是alert()
,因此您可以通过运行以下代码片段一次查看所有内容:
<html>
<head>
<script>
async function getTested() {
console.log("getTested: line1");
let pp = await test1();
console.log(`getTested pp: ${pp}`); //expected to print hello
}
async function test1 () {
console.log(`test1: line 9`);
let promise = await test2();
console.log(`test1: ${promise}`); //expected to print hello
return promise;
}
async function test2 () {
console.log("test2: line 15");
let promise = Promise.resolve('hello');
console.log(`test2: ${await promise}`);
return promise;
}
</script>
</head>
<body onload="getTested()"></body>
</html>