相关疑难解决方法(0)

async/await隐式返回promise?

我读到由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语句不一致.看来,当您从 …

javascript node.js async-await ecmascript-next

85
推荐指数
3
解决办法
4万
查看次数

如何将此 PromiseResult 对象转换为数组?

我已成功从此 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 对象转换为二维数组。

javascript svelte

6
推荐指数
1
解决办法
2万
查看次数

为什么Axios(带有async / await)返回完整的承诺?

我对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中:

在此处输入图片说明

javascript asynchronous axios

4
推荐指数
1
解决办法
1万
查看次数

如何使用async / await返回Ajax结果?

为了熟悉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从函数返回实际的响应字符串?

javascript ajax jquery asynchronous async-await

1
推荐指数
2
解决办法
9769
查看次数

为什么我的函数返回 Promise { <pending> }

作为我的第一个真正的 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 mongoose node.js promise

-3
推荐指数
1
解决办法
3431
查看次数