https://github.com/fixjs/awaitify
A simple wrapper for function generators
https://github.com/fixjs/awaitify
Last synced: 5 months ago
JSON representation
A simple wrapper for function generators
- Host: GitHub
- URL: https://github.com/fixjs/awaitify
- Owner: fixjs
- License: mit
- Created: 2016-01-15T09:10:38.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2019-05-23T09:48:21.000Z (about 7 years ago)
- Last Synced: 2025-08-09T01:54:46.423Z (10 months ago)
- Language: JavaScript
- Size: 36.1 KB
- Stars: 10
- Watchers: 4
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# awaitify v1.1.0
[ ](https://app.codeship.com/projects/196778)
[](https://codeclimate.com/github/fixjs/awaitify)
[](https://www.npmjs.com/package/awaitify)
A lightweight library to simplify asynchronous operations using function generators and `yield` keyword, which is an alternative for `Async/Await` keywords without having to use any Transpiler like babel. You could wrap the function generator inside this function like this:
```javascript
var awaitify = require('awaitify');
var getUsers = awaitify(function*(){
// a xhr request to load users list
var users = yield jQuery.get('/api/users');
return users;
});
getUsers()
.then((users)=>{
console.log(users);
});
// or
var users = yield getUsers();
console.log(users);
```
which allows you await on a promise using `yield` keyword.
# yield awaitify.map([], function* (){})
```javascript
const mapList = function* (){
const mappedUsersInfoList = yield awaitify.map(usersList, function* (userObject){
const userInfo = yield loadUserInfo(userObject._id);
userInfo.baseData = userObject;
return userInfo;
});
// You can have access to the new list of usersInfo
}.awaitify();
```
# awaitify.parallel({})
```javascript
const loadData = function* (){
const { users, config } = yield awaitify.parallel({
users: function* () {
const users = yield getUsers();
console.log(users);
return users;
},
config: awaitify.fs.loadConfigFile('./package.json')
});
// You can have access to both users and config variable here
}.awaitify();
```
# promise.then(function*(){})
This library also allows the pass generator functions to the promise chain implemented by this module:
```javascript
getUsers()
.then(function *(users){
console.log(users);
var user = yield jQuery.get('/api/users/5698d6a5246af3c847be3000');
console.log(user);
});
```
# awaitify.cb
```javascript
var awaitify = require('awaitify');
var fs = require('fs');
var readFile = path => awaitify.cb(cb => fs.readFile(path, 'utf8', cb)));
var main = awaitify(function*(){
var data;
try{
data = yield readFile('/any/file/path');
} catch (err) {
console.log(err, err.stack);
}
return data;
});
main();
// or
readFile('/any/file/path')
.then(data => console.log(data))
.catch(err => console.log(err, err.stack))
```
# awaitify.module
```javascript
const SampleModuleV1 = awaitify.module({
*createSomething(){
let result = yield Promise.resolve('Something');
result += ' V1';
return result;
},
});
const SampleModuleV2 = awaitify.module(SampleModuleV1 ,{
*createSomething(){
let result = yield SampleModuleV1.createSomething();
result += ', V2';
return result;
},
});
const result = yield SampleModuleV2.createSomething();
console.log(result); // "Something V1, V2"
```