在下面的代码中:
function getPosition() {
return new Promise((res, rej) => {
navigator.geolocation.getCurrentPosition(res, rej);
});
}
function main() {
getPosition().then(console.log);
}
main();
我能够在浏览器中记录 Position 对象。但是,如果我不想记录它,而是想返回该值,以便可以在 then() 之外使用它,该怎么办?这可能吗?
我尝试了以下方法:
function main() {
return getPosition().then();
}
console.log(main());
但是我没有在日志中查看我的 Position 对象,而是看到以下内容:
Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: Position
这也不起作用
function main() {
getPosition().then(function(response){
return response;
});
}
console.log(main());
我在日志中得到未定义。
最佳答案
Promise 用于处理异步
操作(考虑ajax调用,或者在setTimeout
内执行的代码),所以你不能有这样的东西
console.log(getPosition().then())
你需要向then
方法传递一个回调,这个回调将在promise解决时执行(想想jquery
中的success回调)
所以基本上在你的例子中,你会有这样的东西:
function main() {
return getPosition();
}
main().then(console.log);
您还可以将 promise 存储在变量中,以便在代码中的其他位置使用它
var position = main();
position.then(console.log);
position.then(console.log);
position.then(positionValue => {/* do what you want with the value */});
请注意,多次调用 then
不会多次执行 Promise,它只会被解析一次
关于javascript - Promise 返回值然后回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284958/