javascript - Promise 返回值然后回调函数

标签 javascript promise closures es6-promise

在下面的代码中:

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,它只会被解析一次

这是promise documentation

关于javascript - Promise 返回值然后回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284958/

相关文章:

javascript - 使用 $http 调用服务后的 Angular promise

javascript - 使用 Node.js/promises 按类型捕获异常

javascript - 具有 JavaScript 事件函数闭包的可变生命周期

javascript - "this"闭包内的关键字

javascript - 查找三次贝塞尔曲线上给定点的系数/函数

javascript - 如何使用 Jquery 和 Json API 通过谷歌地图 API 使用坐标显示城市名称?

javascript - ES6 promise : Promise status not as I expect

python - `del` 语句和自由变量

javascript - Firebase注销用户所有 session

javascript - 验证多个手机号码的正则表达式