我们如何存储由 JavaScript Promise 解析的值?
How can we store the values resolved by a JavaScript Promise?
我目前正在学习异步 JavaScript,我对如何通过承诺获得返回值感到困惑
我的代码:
let p = Promise.resolve("Passed")
let x = p.then(msg=>msg).catch(msg=>msg)
setTimeout(()=>console.log(x), 2)
console.log(x)
输出:
Promise { <pending> }
Promise { 'Passed' }
如何获取 .then
函数返回的字符串“Passed”,以及为什么即使 Promise 已解决,promise 仍未决?但是当我们 console.log
它的值使用 setTimeout
函数给出它的值时,如何从 Promise { 'Passed' }
得到 "Passed"
您打算以这种方式使用承诺:
p.then((x) => {
console.log(x);
});
或这种方式(仅适用于异步函数):
x = await p;
通常,p 实际上是一个 returns 承诺的函数,像这样:
function p() {
return new Promise((resolve, reject) => {
resolve("message");
});
}
您现在无法得到不符合承诺的回复。
要解决您可以使用 2 种方法:
在 then 内部使用一个新函数订阅,该函数获取 promise 结果 // 但它会像这样异步
var p = Promise.resolve([1,2,3]);
p.then(function(v) {
console.log(v[0]); // 1
});
第二个是:
使用具有 await 结构
的异步函数
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 1000)
});
let result = await promise; // in this part it will be wait until promise will end its work
alert(result); // "done!"
}
f();
我目前正在学习异步 JavaScript,我对如何通过承诺获得返回值感到困惑 我的代码:
let p = Promise.resolve("Passed")
let x = p.then(msg=>msg).catch(msg=>msg)
setTimeout(()=>console.log(x), 2)
console.log(x)
输出:
Promise { <pending> }
Promise { 'Passed' }
如何获取 .then
函数返回的字符串“Passed”,以及为什么即使 Promise 已解决,promise 仍未决?但是当我们 console.log
它的值使用 setTimeout
函数给出它的值时,如何从 Promise { 'Passed' }
"Passed"
您打算以这种方式使用承诺:
p.then((x) => {
console.log(x);
});
或这种方式(仅适用于异步函数):
x = await p;
通常,p 实际上是一个 returns 承诺的函数,像这样:
function p() {
return new Promise((resolve, reject) => {
resolve("message");
});
}
您现在无法得到不符合承诺的回复。 要解决您可以使用 2 种方法:
在 then 内部使用一个新函数订阅,该函数获取 promise 结果 // 但它会像这样异步
var p = Promise.resolve([1,2,3]);
p.then(function(v) {
console.log(v[0]); // 1
});
第二个是: 使用具有 await 结构
的异步函数async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 1000)
});
let result = await promise; // in this part it will be wait until promise will end its work
alert(result); // "done!"
}
f();