gpt4 book ai didi

javascript - Getter 中的异步函数 w/Return 回调

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:56 24 4
gpt4 key购买 nike

我想定义一个只读对象属性,它异步获取一个值,然后使用新的 EcmaScript 5 getter 返回它。

但是,该属性始终返回 undefined,即使下面示例代码中的 magicValue 绝对不会是未定义的。此外,当我只是 return 'xxx'; 时,打印的值仍然是 undefined。它仅在我在回调函数外 return 时有效。

无论是否调用myAsyncFunction 的回调,似乎都立即执行了return。我不确定这是 V8 中的错误还是我在滥用 JavaScript 的 getter。
我可以让它工作吗?我想,既然我现在可以使用 getters 和 setters,我将使用 getters/setters 来读写属性和常规函数来完成某些任务。

var User = function (id) {
this.id = id;
};

Object.defineProperty(User.prototype, 'magic', {
get : function () {
myAsyncFunction(function (magicValue) {
return magicValue;
});
}
});

var u = new User(5);
console.log(u.magic);

打印undefined

最佳答案

如今,异步操作通常使用 Promises 处理.当您调用您的 getter 时,它会返回一个 promise ,您可以使用“then()”方法附加一个回调。

Object.defineProperty(User.prototype, "magic", {
get: function() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(JSON.stringify({
magic: 'value'
}));
}, 1000);
});
}
});

这是一个工作示例: https://jsfiddle.net/tw6gaudz/2/

关于javascript - Getter 中的异步函数 w/Return 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11843619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com