我对异步/等待非常困惑。我一直在阅读有关s / o的答案,但我不明白async / await是否确实满足我的要求。
我正在尝试以同步方式返回异步调用的结果,也许这就是为什么我失败了,也许不是因为这个原因吗?我不想返回一个回调(或Promise),而是返回一个结果。
这就是我一直在尝试的事情
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会做到这一点?
答案 0 :(得分:1)
fetch()
已经返回了一个承诺,因此没有理由将其包装在另一个承诺中。
_load(){ return fetch('https://jsonplaceholder.typicode.com/todos/1')}
答案 1 :(得分:0)
我正在尝试以同步方式返回异步调用的结果
那是不可能的。异步函数同步返回的唯一内容是一个promise(所有异步函数根据设计都返回promise)。异步函数使使用Promise的语法更加容易,但是它们仍然是异步的。
当您在异步函数中使用await
时,这将延迟返回的诺言解析所需的时间。这很好:如果有任何代码正在等待该诺言,它将等待更长的时间,因此将推迟直到您的异步功能完全完成。但是等待诺言不是自动的。您要么需要使用promise的.then
方法,要么需要在await
函数中使用async
关键字。
let resPromise = myTest.get();
resPromise.then(res => console.log(res));
async someFunction() {
const res = await myTest.get();
console.log(res);
}
答案 2 :(得分:-1)
我们可以通过在全局自调用功能中指定异步来尝试此操作,
(async function() {
let namespace2 = {};
namespace2.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 myTest2 = new namespace2.Test();
//Here I want data NOT a promise
let res2 = await myTest2.get();
console.log(res2);
})();
答案 3 :(得分:-2)
您可以通过await
(请参见https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/await)
所以您只需写:
//Here I want data NOT a promise
let res = await myTest.get();
然后console.log(res);
将返回解析的值。