我读到由async关键字标记的异步函数隐式返回一个promise:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
Run Code Online (Sandbox Code Playgroud)
但这不是连贯的...假设doSomethingAsync()返回一个promise,而await关键字将返回promise中的值,而不是promise itsef,那么我的getVal函数应返回该值,而不是隐式promise.
那究竟是什么情况呢?由async关键字标记的函数是否隐式返回promises,还是我们控制它们返回的内容?
也许如果我们没有明确地回报某些东西,那么它们会隐含地回报一个承诺......?
更清楚的是,上述和之间存在差异
function doSomethingAync(charlie) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(charlie || 'yikes');
}, 100);
})
}
async function getVal(){
var val = await doSomethingAync(); // val is not a promise
console.log(val); // logs 'yikes' or whatever
return val; // but this returns a promise
}
var ret = getVal();
console.log(ret); //logs a promise
Run Code Online (Sandbox Code Playgroud)
在我的概要中,行为确实与传统的return语句不一致.看来,当您从 …
我已成功从此 async/await 函数中检索到承诺:
const fetchJSON= (async () => {
const response = await fetch('http://localhost:8081/getJavaMaps')
return await response.json()
})();
Run Code Online (Sandbox Code Playgroud)
现在我想将结果转换或分配给数组。这就是 console.log(fetchJSON) 中的结果:
[[PromiseResult]]: Object
One: "Batman"
Three: "Superman"
Two: "Ironman"
Run Code Online (Sandbox Code Playgroud)
但是,当我执行如下操作时: console.log(fetchJSON.One); console.log(fetchJSON.length);
我总是得到:
undefined
Run Code Online (Sandbox Code Playgroud)
我试过这个:
let myarray = Object.entries(fetchJSON);
Run Code Online (Sandbox Code Playgroud)
但它不会将 PromiseResult 对象转换为二维数组。
我对async/ 有疑问await。这是我的代码:
import axios from 'axios'
export default async function getRequestedData (requestAddress, params) {
return await axios.get(requestAddress, {params: params})
}Run Code Online (Sandbox Code Playgroud)
但是它不是返回结果而是返回完整的承诺,因此数据大量嵌套在一个Promise中:
为了熟悉async/await,我在Chrome中尝试了以下代码:
async function f() {
return await $.get('/');
};
var result = f();
Run Code Online (Sandbox Code Playgroud)
但result不保存结果(字符串);而是持有一个Promise需要再次等待的。这段代码确实给了我响应字符串:
var response = await $.get('/');
Run Code Online (Sandbox Code Playgroud)
如何使用await从函数返回实际的响应字符串?
作为我的第一个真正的 MERN 项目,我正在构建一个留言板。我目前正在开发一个节点路由来请求板名称及其相关的帖子数,但我遇到了一个问题。我没有得到我需要的值,而是收到信息告诉我有一个待处理的承诺,这看起来很奇怪,因为我正在使用 async/await。这是函数:
exports.postsPerBoard = async (req, res) => {
try {
const boards = await Board.find();
const postCount = boards.map(async (boardI) => {
const posts = await Post.find({ board: boardI.slug });
return [boardI.slug, posts.length];
});
console.log(postCount);
res.send(postCount);
} catch (err) {
console.error(err.message);
res.status(500).send('server error');
}
};
Run Code Online (Sandbox Code Playgroud)
这是控制台日志的结果:
[0] [
[0] Promise { <pending> },
[0] Promise { <pending> },
[0] Promise { <pending> },
[0] Promise { <pending> },
[0] Promise { <pending> }
[0] ]
Run Code Online (Sandbox Code Playgroud) javascript ×5
async-await ×2
asynchronous ×2
node.js ×2
ajax ×1
axios ×1
jquery ×1
mongoose ×1
promise ×1
svelte ×1