从Promise返回值,然后回调函数

时间:2018-09-11 22:24:14

标签: javascript promise closures es6-promise

在以下代码中:

"

我能够在浏览器中记录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

我在日志中得到未定义

2 个答案:

答案 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,只会被解决一次

这里是promise documentation

答案 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()