Tag: async await

在Node中处理嵌套asynchronous等待调用的正确方法是什么?

试图学习在Javascript中的asynchronous模式,但它似乎没有等待下面的行。 在下面的例子中,集合是请求对象,而不是实际的parsing主体。 是不是await要求完成? async function importUsers(endpoint) { const options = { data: search, uri: endpointCollection, headers, } try { const collection = await browser.post(options, (err, res, body) => JSON.parse(body)) // collection is the request object instead of the result of the request const users = await collection.data.forEach(item => parseUserProfile(item)); await users.forEach(user => saveUserInfo(user)) } catch(err) […]

在承诺链中使用等待

我刚刚升级到节点8,并希望开始使用asynchronous/等待。 我遇到了一个我花了一段时间才解决的错误,其实我只是想知道是否有一个更优雅的方式。 在这个时候,我不想重构整个函数,因为它会导致所有次要的重构。 async doSomething(stuff) { … return functionThatReturnsPromise() .then((a) => …) .then((b) => …) .then((c) => { const user = await someService.createUser(stuff, c); user.finishSetup(); }); }; 有没有一种方法可以在promise链中使用await而不必重构上面的所有内容以使其async ?

我如何使用MongoClient的asynchronous等待

当我运行这个(使用节点v7.5.0与 – 和谐): var MongoClient = require('mongodb').MongoClient, var url = "mongodb://localhost:27017/myDB"; var test = await MongoClient.connect(url); module.exports = test; 我得到这个错误: var test = await MongoClient.connect(url); ^^^^^^^^^^^ SyntaxError: Unexpected identifier MongoClient.connect(url)确实返回一个promise 我最终想要实现的是创build一个连接到mondoDB的节点模块,并且可以使用,如下例所示: var db = require('../utils/db'); //<– this is what I want to create above col = db.collection('myCollection'); module.exports.create = async fuction(data) { return await col.insertOne(data); […]

如何用async / await重构这个函数?

我很新asynchronous/等待,想知道什么是最好的方式来重构下面的代码与asynchronous/等待? export const createUser = (values, history) => { return dispatch => { axios.post('/api/signup', values) .then(res => { console.log('result', res); }, rej => { console.log('rejection', rej); }); } } 当只有一个参数提供给我的时候,那么这对我来说是非常简单的,但是如果你有两个这样的参数,会发生什么呢?

在Node.JS中使用async / await进行适当的请求

在我的程序中,我从另一个API模块进行async调用: var info = await api.MyRequest(value); 模块代码: var request = require("request") module.exports.MyRequest = async function MyRequest(value) { var options = { uri: "http://some_url", method: "GET", qs: { // Query string like ?key=value&… key : value }, json: true } try { var result = await request(options); return result; } catch (err) { console.error(err); } } […]

asynchronous/等待类构造函数

目前,我试图在类构造函数中使用async/await 。 这样我可以为我正在进行的一个Electron项目获得一个自定义e-mail标签。 customElements.define('e-mail', class extends HTMLElement { async constructor() { super() let uid = this.getAttribute('data-uid') let message = await grabUID(uid) const shadowRoot = this.attachShadow({mode: 'open'}) shadowRoot.innerHTML = ` <div id="email">A random email message has appeared. ${message}</div> ` } }) 但是,目前这个项目不能运行,出现以下错误: Class constructor may not be an async method 有没有办法绕过这个,所以我可以在这个使用asynchronous/等待? 而不是要求callback或.then()?

使用await时意外的标识符

我目前正在尝试使用asynchronous/等待一个函数,要求循环是同步的。 这是function: async channelList(resolve, reject) { let query = ['channellist'].join(' '); this.query.exec(query) .then(response => { let channelsRaw = response[0].split('|'); let channels = []; channelsRaw.forEach(data => { let dataParsed = ResponseParser.parseLine(data); let method = new ChannelInfoMethod(this.query); let channel = await method.run(dataParsed.cid); channels.push(channel); }); resolve(channels); }) .catch(error => reject(error)); } 当我尝试运行它时,我得到这个错误: let channel = await method.run(dataParsed.cid); ^^^^^^ […]

无法解决承诺时使用asynchronous与巴贝尔和ES6诺言等待

我有以下节点应用程序包含一个asynchronous函数,等待ES6的承诺。 async function test(id){ try { let val = await Promise.resolve(id); console.log("val: " + val); } catch (error) { console.log("error: " + error); } } test(1); 结果= val:未定义 预期结果:val:1 我用gulp-babel把它编译成ES5。 我有以下设置在吞咽任务: .pipe(babel({ optional: ["es7.asyncFunctions"] })) 在npm安装babel之后,我也需要“babel / polyfill”。 运输代码: function test(id) { var val; return regeneratorRuntime.async(function test$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { […]

我怎样才能在顶层使用asynchronous/等待?

我一直在asynchronous/等待,经过几篇文章,我决定自己testing一下。 然而,我似乎无法绕过我的头为什么这是行不通的: async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = main(); console.log('outside: ' + text) 控制台输出以下内容(节点v8.6.0): >外:[object promise] >里面:嘿,那里 为什么函数内部的日志消息之后执行? 我认为asynchronous/等待创build的原因是为了执行使用asynchronous任务的同步执行。 有没有办法可以使用函数内返回的值,而不使用main()后面的.then() main() ?

如何使用ES8asynchronous/等待与stream?

在https://stackoverflow.com/a/18658613/779159中是如何使用内置的encryption库和stream来计算文件的md5的示例。 var fs = require('fs'); var crypto = require('crypto'); // the file you want to get the hash var fd = fs.createReadStream('/some/file/name.txt'); var hash = crypto.createHash('sha1'); hash.setEncoding('hex'); fd.on('end', function() { hash.end(); console.log(hash.read()); // the desired sha1sum }); // read all file and pipe it (write it) to the hash object fd.pipe(hash); 但是,有可能将此转换为使用ES8asynchronous/等待,而不是像上面看到的使用callback,但仍然保持使用stream的效率?