【发布时间】:2019-09-18 07:39:32
【问题描述】:
我正在尝试使用 async/await 关键字进行异步设置器。
这里有一些需要时间的伪造数据库函数
function getProjectFromDatabase() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve('My cool project!'), 500) // 500ms latency
});
}
function setProjectToDatabase(projectName) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve('set!'), 500) // 500ms latency
});
}
这是用户的实现示例
let user = {
// Getter
get project() {
return (async () => {
return await getProjectFromDatabase();
})();
},
// Setter
set project(projectName) {
return (async () => {
return await setProjectToDatabase(projectName);
})();
},
// Method
setProject(projectName) {
return (async () => {
return await setProjectToDatabase(projectName);
})();
}
};
这是一个使用示例
(async function() {
console.log(await user.project); // Getter works!
await user.setProject('My new cool project!'); // Method works!
await (user.project = 'Another project'); // Setter doesn't work...
})();
但是 setter 函数的返回值似乎被忽略了。
我怎么能这样做?
【问题讨论】:
-
似乎这些不适合 getter/setter 属性。
-
return (async () => { return await X; })();是写return Promise.resolve( X );的一种非常复杂的方式(或者当X 已经是Promise 时只是return X;)。
标签: javascript ecmascript-6 promise async-await