在以下代码中:
"
我能够在浏览器中记录Position对象。但是,如果我不想返回记录值,我想返回该值,以便可以在 then()之外使用它。那有可能吗?
我尝试了以下操作:
function getPosition() {
return new Promise((res, rej) => {
navigator.geolocation.getCurrentPosition(res, rej);
});
}
function main() {
getPosition().then(console.log);
}
main();
但是我没有看到日志中的Position对象,而是看到了以下内容:
function main() {
return getPosition().then();
}
console.log(main());
非常感谢。
更新这也不起作用
Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: Position
我在日志中得到未定义。
答案 0 :(得分:2)
Promise用于处理async
操作(想想ajax调用或在setTimeout
内部执行的代码),所以您不能有这样的事情
console.log(getPosition().then())
您需要将回调传递给then
方法,该回调将在promise解决后执行(请考虑jquery
中的成功回调)
因此,基本上在您的示例中,您将具有以下内容:
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,只会被解决一次
答案 1 :(得分:0)
您可以使用async / await
async function main() {
console.log(await getPosition());
}
以下是一个有效的代码段,演示了这一点:
function getPosition() {
return new Promise((res, rej) => {
// simulate API
setTimeout( ()=> res('123,456'), 1000)
});
}
async function main(){
console.log(await getPosition())
}
main()