一个非常简单的问题。我将其简化为最能说明我问题的版本。
为什么这个普通的JS返回一个promise,我如何才能使其返回“ Hello”?
let result = test()
.then(function(result) {
return result;
});
alert(result);
function test(serialized) {
return new Promise(function(resolve, reject) {
resolve("Hello");
});
}
答案 0 :(得分:2)
正在发生的事情是您正在“更改” then
方法返回的值。
then
方法将始终返回承诺,即使您返回的是值,它也封装在已解析的承诺中(例如Promise.resolve('Hello')
),这使您可以实现可链接性,例如,您可以在then
回调中调用并返回其他promise,它们将等待解决方案继续并解决。
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");
});
}
答案 1 :(得分:0)
alert
调用test
函数,该函数在调用时返回promise(未解决)。
当承诺在.then()
方法内解析时,您必须执行所需的任何代码执行。
test()
.then(function(result) {
alert(result);
})
function test(serialized) {
return new Promise(function(resolve, reject) {
resolve("Hello");
});
}
答案 2 :(得分:0)
promise.then((result) => {})
总是返回另一个promise,以便我们可以链接多个.then()
调用。
how can I get it to return "Hello"?
:为此,您必须await
一个承诺。
例如alert(await test())
的问题是,您只能在异步函数中使用await。
另一种选择是在此期间发出警报。
test().then((result) => alert(result))