【发布时间】:2019-10-20 02:51:00
【问题描述】:
我对异步/等待很困惑。我一直在阅读关于 s/o 的答案,但我不明白 async/await 是否真的做了我想要的。
我正在尝试以同步方式返回异步调用的结果,也许这就是我失败的原因,也许不是为此而设计的?我不想返回回调(或承诺),而是返回一个结果。
这就是我一直在尝试做的事情
let namespace = {};
namespace.Test = class{
constructor(){
}
async get(){
let response = await this._load();
let data = await response;
console.log(data); //Logs my data but return Promise instead
return data;
}
_load(){
let promise = new Promise((resolve, reject) => {
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(function(response){
resolve(response.json());
}).catch(error => reject(error));
});
return promise;
}
}
//The goal is to figure out if I can have that
let myTest = new namespace.Test();
//Here I want data NOT a promise
let res = myTest.get();
console.log(res); //logs a Promise but I want what has been resolved instead
我认为解决 _load 中的承诺,然后在 get 中使用 await 可以做到这一点?
【问题讨论】:
-
async 函数会立即返回一个 Promise,当它们到达
return时,该 Promise 就会被解析。没有回头路了,对不起。 :) -
不应该
this._load()指向空的构造函数中的load()或者在构造函数之前作为私有? -
@zer00ne 不,我不希望类在开始时加载
-
@Eric 你只有一个线程,这是一个有很多好处的设计选择,但也有一些缺点。缺点之一是您需要决定如何处理异步事物。 JS 选择了不阻塞线程,这在 99% 的情况下几乎可以肯定是正确的选择。有时它会让事情变得不那么方便,但是一旦你习惯了它就不会那么难了。
-
您尝试过新的 getter 语法吗?
get async retrieve() {...不是 100% 关于async部分