为什么这个简单的JS promise return一个promise?
Why does this simple JS promise return a promise?
一个非常简单的问题。我已将其归结为最简单的版本来说明我的问题。
为什么这个 vanilla JS return 是一个 promise,我怎样才能得到它 return "Hello"?
let result = test()
.then(function(result) {
return result;
});
alert(result);
function test(serialized) {
return new Promise(function(resolve, reject) {
resolve("Hello");
});
}
发生的事情是,您是 "alerting" return 由 then
方法编辑的值。
then
方法总是 return 一个承诺,即使你正在 return 一个值,它被包裹在一个已解决的承诺中(例如 Promise.resolve('Hello')
),这允许您实现 chainability,例如您可以在 then
回调中调用和 return 其他承诺,它们将等待决议继续并解决。
test()
.then(function(result) {
console.log(result);
return result + ' world!';
}).then(function(result2) {
console.log(result2); // Hello world!
return new Promise(function (resolve) { resolve('End') });
}).then(function (result) {
console.log(result);
})
function test(serialized) {
return new Promise(function(resolve, reject) {
resolve("Hello");
});
}
promise.then((result) => {})
始终 return 另一个承诺,以便我们可以链接多个 .then()
调用。
how can I get it to return "Hello"?
: 为此你必须await
一个承诺。
例如:alert(await test())
问题是您只能在异步函数中使用 await。
另一种选择是在那时发出警报。
test().then((result) => alert(result))
一个非常简单的问题。我已将其归结为最简单的版本来说明我的问题。
为什么这个 vanilla JS return 是一个 promise,我怎样才能得到它 return "Hello"?
let result = test()
.then(function(result) {
return result;
});
alert(result);
function test(serialized) {
return new Promise(function(resolve, reject) {
resolve("Hello");
});
}
发生的事情是,您是 "alerting" return 由 then
方法编辑的值。
then
方法总是 return 一个承诺,即使你正在 return 一个值,它被包裹在一个已解决的承诺中(例如 Promise.resolve('Hello')
),这允许您实现 chainability,例如您可以在 then
回调中调用和 return 其他承诺,它们将等待决议继续并解决。
test()
.then(function(result) {
console.log(result);
return result + ' world!';
}).then(function(result2) {
console.log(result2); // Hello world!
return new Promise(function (resolve) { resolve('End') });
}).then(function (result) {
console.log(result);
})
function test(serialized) {
return new Promise(function(resolve, reject) {
resolve("Hello");
});
}
promise.then((result) => {})
始终 return 另一个承诺,以便我们可以链接多个 .then()
调用。
how can I get it to return "Hello"?
: 为此你必须await
一个承诺。
例如:alert(await test())
问题是您只能在异步函数中使用 await。
另一种选择是在那时发出警报。
test().then((result) => alert(result))