相关疑难解决方法(0)

ES2017 - 异步与收益率

我对目前关于将async函数和关键字添加await到下一个EcmaScript的讨论感到困惑.

我不明白为什么有必要在async关键字之前使用function关键字.

从我的观点来看,await关键字等待发电机或承诺的结果一个函数的return应该是足够的.

await应该在普通函数和生成器函数中简单可用,无需额外的async标记.

如果我需要创建一个函数作为结果应该可用await,我只需使用一个promise.

我的理由是这个很好的解释,下面的例子来自:

async function setupNewUser(name) {  
  var invitations,
      newUser = await createUser(name),
      friends = await getFacebookFriends(name);

  if (friends) {
    invitations = await inviteFacebookFriends(friends);
  }

  // some more logic
}
Run Code Online (Sandbox Code Playgroud)

它也可以作为普通函数完成,如果函数的执行将等待完成孔函数,直到满足所有等待.

function setupNewUser(name) {  
  var invitations,
      newUser = await createUser(name),
      friends = await getFacebookFriends(name);

  if (friends) {
    invitations = await inviteFacebookFriends(friends);
  }

  // return because createUser() and getFacebookFriends() …
Run Code Online (Sandbox Code Playgroud)

javascript async-await ecmascript-6 ecmascript-2017

32
推荐指数
3
解决办法
7252
查看次数

JS async/await - 为什么等待需要异步?

为什么使用await需要声明的外部函数async

例如,为什么这个mongoose语句需要它返回一个promise的函数?

async function middleware(hostname, done) {
  try {
    let team = await Teams.findOne({ hostnames: hostname.toLowerCase() }).exec();
    done(null, team);
  } catch (err) { done(err); }
}
Run Code Online (Sandbox Code Playgroud)

我看到运行时/转换器解析了团队对它的价值的承诺和异步信号,它"抛出"被拒绝的承诺.

但是try/catch"捕获"那些被拒绝的承诺,那么为什么异步并等待如此紧密耦合呢?

javascript asynchronous async-await

9
推荐指数
2
解决办法
680
查看次数

Nodejs 为什么 await 只限于异步函数?

await 的可能重复 仅在 async 函数中有效

我是新手NodeJS,我发现这个概念async-await有点混乱。经过一些阅读和混乱之后,这就是我的理解。

假设,我有一个sum这样的功能。

function sum(a, b) {
  // print the numbers
  for (var i = 0; i < 100000; i++) {
    console.log(i);
  }
  // settimeout
  new Promise (resolve => {
    setTimeout(resolve, 1000);
  });
  return a+b;
}

function main() {
  let a = sum(5,2);
  console.log(a);
}

main();
Run Code Online (Sandbox Code Playgroud)

它为计时器分配一个新线程并继续正常流程。它首先打印所有数字,返回a 7,然后在退出前等待1 秒。

但是现在我想按照它们的写入顺序执行这些行。await在 timer 之前放置一个关键字是有意义的Promise

async function sum(a, b) {
  // print the numbers
  for (var …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js async-await

7
推荐指数
1
解决办法
1769
查看次数

为什么javascript函数需要关键字"async"?"await"关键字不够用吗?

例如,为什么下面的函数需要"async"..是不是使用等待特定的足够的编译器来解析代码而没有歧义?

# Why do we need async here
async function foo() {
  var user = await getUser(user_id);
  console.log(user);
}
Run Code Online (Sandbox Code Playgroud)

是出于向后兼容的原因吗?(我想不出任何在标准Javascript中使用await键盘的代码..)?

是否主要是为了清楚地表明此函数使用新的async关键字?谢谢

javascript async-await ecmascript-next

5
推荐指数
1
解决办法
173
查看次数

为什么我必须将async关键字放到有等待关键字的函数中?

我只想等待一个进程完成,不想让函数异步.
请参阅以下代码.
我不得不使getUserList异步,因为函数中有一个await关键字.因此,我还必须编写"await UsersService.getUserList"来执行该方法,并且我必须使父函数异步.那不是我想要做的.

import xr from 'xr' //a package for http requests

class UsersService {

  static async getUserList() {
    const res = await xr.get('http://localhost/api/users')
    return res.data
  }

}

export default UsersService
Run Code Online (Sandbox Code Playgroud)
import UsersService from './UsersService'

class SomeClass {

  async someFunction() { //async again!!
    const users = await UsersService.getUserList() //await again!!
  }

}
Run Code Online (Sandbox Code Playgroud)

javascript async-await babeljs ecmascript-next

5
推荐指数
1
解决办法
481
查看次数

为什么“await”在函数定义中需要“async”

我目前正在学习 Dart,但这也适用于现在 JavaScript 世界中发生的事情,而且 C# 似乎也使用相同的模式。

在 Dart 中,任何使用的函数await本身都必须通过async以下方式标记为异步:

import "dart:html";

main() async {
  var context = querySelector("canvas").context2D;
  var running = true;

  while (running) {
    var time = await window.animationFrame;
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义。如果一个函数正在等待一个异步函数完成,那么它不是被认为是阻塞的吗?为什么 JS 和 Dart 要求将其标记为异步?不会适得其反吧?

对我来说,如果调用函数在async调用任何在其定义中也包含它的函数时必须使用关键字,那将更有意义。在这种模式中,await将用于将异步函数转换为同步函数。

这种方式也可以避免重复的功能,因为现在,库似乎总是有func()andfuncSync()funcAsync()

javascript asynchronous promise dart

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