Max*_*eng 7 javascript v8 node.js ecmascript-5
我想定义一个只读对象属性,该属性异步获取一个值,然后使用新的EcmaScript 5 getter返回它.
但是,undefined即使magicValue在下面的示例代码中明确地永远不会定义,属性也会始终返回.另外,当我只是return 'xxx';打印值仍然是undefined.它仅在我return在回调函数之外时才有效.
return无论是否调用回调,似乎都会立即执行myAsyncFunction.我不确定这是V8中的错误,还是我滥用JavaScript的getter.
我可以让这个工作吗?我想,既然我现在可以使用getter和setter,我将使用getter/setter来读写属性和常规函数来完成某些任务.
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);
Run Code Online (Sandbox Code Playgroud)
打印undefined.
如今,异步操作通常由Promises处理。当您调用 getter 时,它会返回一个承诺,您可以使用“then()”方法附加一个回调。
Object.defineProperty(User.prototype, "magic", {
get: function() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(JSON.stringify({
magic: 'value'
}));
}, 1000);
});
}
});
Run Code Online (Sandbox Code Playgroud)
这是一个工作示例:https : //jsfiddle.net/tw6gaudz/2/
| 归档时间: |
|
| 查看次数: |
4337 次 |
| 最近记录: |