JavaScript 答应麻烦
JavaScript promise trouble
函数如下:
function load_img(url) {
return new Promise((resolve, rejected) => {
const img = new Image();
img.height = 250;
img.src = url;
document.body.append(img);
img.addEventListener("load", () => {
resolve("LOL");
});
img.addEventListener("error", () => {
rejected();
});
});
}
函数调用如下:
load_img(url1)
.then((mes) => {
console.log(mes);
return load_img(url2);
})
.then((mes) => {
load_img(url3);
console.log(mes);
})
.catch(() => console.log("Some error"))
我不明白为什么要用在第一个thenreturn函数之前,函数已经return promise 在它的主体中,但是当我们在 then 中使用它而没有 return 时,第二个 then 不会得到resolve() 中规定的任何值。
请帮帮我!:)
第二个 .then()
中的 mes
参数来自第一个 .then()
处理程序的 return 值。如果你没有从第一个 .then()
处理程序中 return 任何东西,那么你就不会在第二个 .then()
处理程序中得到任何已解析的值,并且 mes
将是 undefined
.
此外,第二个 .then()
处理程序只会“等待” load_img(url2)
解析,如果你 return 它来自第一个 .then()
处理程序的承诺。这就是您正确链接承诺的方式。
也许您只是使用此代码进行测试,但您不必按顺序加载两个图像,因为第二个图像不依赖于第一个图像。您可以并行加载它们并使用 Promise.all()
知道它们何时完成。
函数如下:
function load_img(url) {
return new Promise((resolve, rejected) => {
const img = new Image();
img.height = 250;
img.src = url;
document.body.append(img);
img.addEventListener("load", () => {
resolve("LOL");
});
img.addEventListener("error", () => {
rejected();
});
});
}
函数调用如下:
load_img(url1)
.then((mes) => {
console.log(mes);
return load_img(url2);
})
.then((mes) => {
load_img(url3);
console.log(mes);
})
.catch(() => console.log("Some error"))
我不明白为什么要用在第一个thenreturn函数之前,函数已经return promise 在它的主体中,但是当我们在 then 中使用它而没有 return 时,第二个 then 不会得到resolve() 中规定的任何值。
请帮帮我!:)
第二个 .then()
中的 mes
参数来自第一个 .then()
处理程序的 return 值。如果你没有从第一个 .then()
处理程序中 return 任何东西,那么你就不会在第二个 .then()
处理程序中得到任何已解析的值,并且 mes
将是 undefined
.
此外,第二个 .then()
处理程序只会“等待” load_img(url2)
解析,如果你 return 它来自第一个 .then()
处理程序的承诺。这就是您正确链接承诺的方式。
也许您只是使用此代码进行测试,但您不必按顺序加载两个图像,因为第二个图像不依赖于第一个图像。您可以并行加载它们并使用 Promise.all()
知道它们何时完成。