标签: ecmascript-2017

使用async/await和forEach循环

asyncawait循环中使用是否有任何问题?我正在尝试循环遍历文件数组和forEach每个文件的内容.

import fs from 'fs-promise'

async function printFiles () {
  const files = await getFilePaths() // Assume this works fine

  files.forEach(async (file) => {
    const contents = await fs.readFile(file, 'utf8')
    console.log(contents)
  })
}

printFiles()
Run Code Online (Sandbox Code Playgroud)

这段代码确实有效,但这可能会出错吗?我有人告诉我你不应该使用await这样的高阶函数,所以我只是想问一下这是否有任何问题.

javascript node.js promise async-await ecmascript-2017

864
推荐指数
24
解决办法
38万
查看次数

如何在async/await语法中拒绝?

如何拒绝async/await函数返回的promise?

例如,最初

foo(id: string): Promise<A> {
  return new Promise((resolve, reject) => {
    someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400))
  });
}
Run Code Online (Sandbox Code Playgroud)

转换为async/await

async foo(id: string): Promise<A> {
  try{
    await someAsyncPromise();
    return 200;
  } catch(error) {//here goes if someAsyncPromise() rejected}
    return 400; //this will result in a resolved promise.
  });
}
Run Code Online (Sandbox Code Playgroud)

那么,在这种情况下,我怎么能正确地拒绝这个承诺呢?

javascript asynchronous typescript es6-promise ecmascript-2017

234
推荐指数
6
解决办法
10万
查看次数

async函数+ await + setTimeout的组合

我正在尝试使用新的异步功能,我希望解决我的问题将来会帮助其他人.这是我正在运行的代码:

  async function asyncGenerator() {
    // other code
    while (goOn) {
      // other code
      var fileList = await listFiles(nextPageToken);
      var parents = await requestParents(fileList);
      // other code
    }
    // other code
  }

  function listFiles(token) {
    return gapi.client.drive.files.list({
      'maxResults': sizeResults,
      'pageToken': token,
      'q': query
    });
  }
Run Code Online (Sandbox Code Playgroud)

问题是,我的while循环运行得太快,并且脚本每秒向google API发送太多请求.因此,我想建立一个延迟请求的睡眠功能.因此我也可以使用此函数来延迟其他请求.如果有其他方式延迟请求,请告诉我.

无论如何,这是我的新代码不起作用.请求的响应返回到setTimeout中的匿名异步函数,但我只是不知道如何将响应返回给sleep函数resp.到最初的asyncGenerator函数.

  async function asyncGenerator() {
    // other code
    while (goOn) {
      // other code
      var fileList = await sleep(listFiles, nextPageToken);
      var parents = await requestParents(fileList);
      // other code
    }
    // other code
  } …
Run Code Online (Sandbox Code Playgroud)

javascript settimeout async-await ecmascript-2017

219
推荐指数
10
解决办法
17万
查看次数

对Array.map使用async await

给出以下代码:

var arr = [1,2,3,4,5];

var results: number[] = await arr.map(async (item): Promise<number> => {
        await callAsynchronousOperation(item);
        return item + 1;
    });
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

TS2322:类型'Promise <number> []'不能分配给'number []'类型."承诺<编号>类型不能指定为"编号"类型.

我该如何解决?怎样才能让async awaitArray.map一起工作?

javascript promise async-await typescript ecmascript-2017

139
推荐指数
7
解决办法
9万
查看次数

如何在顶层使用async/await?

我一直在浏览async/await,经过几篇文章后,我决定自己测试一下.但是,我似乎无法理解为什么这不起作用:

async function main() {  
    var value = await Promise.resolve('Hey there');
    console.log('inside: ' + value);
    return value;
}

var text = main();  
console.log('outside: ' + text);
Run Code Online (Sandbox Code Playgroud)

控制台输出以下内容(节点v8.6.0):

>外面:[对象承诺]

>里面:嘿那里

为什么函数内部的日志消息会在之后执行?我认为创建async/await的原因是为了使用异步任务执行同步执行.

有没有办法可以使用函数内部返回的值而不使用asyncafter await

javascript node.js async-await ecmascript-2017

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

使用async/await尝试/捕获块

我正在深入研究节点7 async/await功能,并在这样的代码中保持绊脚石

function getQuote() {
  let quote = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
  return quote;
} …
Run Code Online (Sandbox Code Playgroud)

node.js async-await ecmascript-2017

100
推荐指数
5
解决办法
11万
查看次数

如何"等待"回调回来?

使用简单回调时,例如下面的示例:

test() {
  api.on( 'someEvent', function( response ) {
    return response;
  });
}
Run Code Online (Sandbox Code Playgroud)

如何将函数更改为使用async/await?具体来说,假设'someEvent'保证只被调用一次,我希望函数test是一个异步函数,在执行回调之前不会返回,例如:

async test() {
  return await api.on( 'someEvent' );
}
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous callback async-await ecmascript-2017

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

(ES6)类(ES2017)async/await getter

是否可以让ES6类getter从ES2017 await/async函数返回一个值.

class Foo {
    async get bar() {
        var result = await someAsyncOperation();

        return result;
    }
}

function someAsyncOperation() {
    return new Promise(function(resolve) {
        setTimeout(function() {
            resolve('baz');
        }, 1000);
    });
}

var foo = new Foo();

foo.bar.should.equal('baz');
Run Code Online (Sandbox Code Playgroud)

async-await ecmascript-6 ecmascript-2017

53
推荐指数
3
解决办法
2万
查看次数

正确尝试...使用Async/Await捕获语法

我喜欢Async/Await在Typescript等中提供的新功能的平坦性.但是,我不确定我喜欢这样一个事实,即我必须awaittry...catch块的外部声明变量才能在以后使用它.像这样:

let createdUser
try {
    createdUser = await this.User.create(userInfo)
} catch (error) {
    console.error(error)
}

console.log(createdUser)
// business
// logic
// goes
// here
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我,但似乎最好不要在机构中放置多行业务逻辑try,所以我只留下createdUser在块外声明,在块中分配它的替代方案,以及然后用它.

在这种情况下,最佳做法是什么?

javascript try-catch promise async-await ecmascript-2017

49
推荐指数
3
解决办法
2万
查看次数

现在使用async/await是否安全?

现在在Javascript中使用async-await而不是生成器承诺是否安全,知道语法尚未生​​成并将随ES8的发布而来?

我可以指望哪些浏览器可用,以及这种语法不可用的浏览器有多常见?安全我的意思是没有像巴贝尔这样的转发器?

javascript async-await ecmascript-6 ecmascript-2017

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