create account

Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods by numberjocky

View this thread on: hive.blogpeakd.comecency.com
· @numberjocky · (edited)
$71.09
Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods
This is Part 13 of a series of posts describing how to use the [Steem Javascript API](https://github.com/steemit/steem-js) to view data from the Steem blockchain in a web browser. The previous 12 posts were:

* [Part 1:](https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-1-very-basic-html) Text editors and minimal HTML
* [Part 2:](https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-2-very-basic-html-utf-8-meta-tag-and-inline-css) Metadata, Unicode, and inline CSS 
* [Part 3:](https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-3-very-basic-html-meta-tags-nav-and-footer-bars-divs-and-entities) Metadata, nav and footer bars, divs, and HTML entities
* [Part 4:](https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-4-basic-html-forms-scripts-and-the-developer-s-console) Forms, scripts, and the developer console
* [Part 5:](https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-5-input-text-into-a-form-and-use-html-id-attributes-to-access-and-modify) Using HTML id attributes to modify HTML elements using Javascript
* [Part 6:](https://steemit.com/javascript/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-6-using-the-steem-api-cdn-and-the-getaccounts-function-and-examining-the) Using the Steem API CDN and the getAccounts() function, and examining the account data model
* [Part 7:](https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-7-html-tables-javascript-for-in-loop-css-in-the-html-style-element) HTML tables, javascript for/in loop, CSS in the HTML style element
* [Part 8:](https://steemit.com/javascript/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-8-html-css-and-javascript-comments-and-organizing-javascripting-using) HTML, CSS, and Javascript comments; Javascript functions and MVC
* [Part 9:](https://steemit.com/javascript/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-9-compute-the-voting-power-and-reputation-score-of-a-user-javascript-const) Compute Voting Power and Reputation Score, Javascript "const" and "let" with block scope and loop scope
* [Part 10:](https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-10-calculating-the-steem-power-and-javascript-asynchronous-vs-synchronous) Calculating the Steem Power and Javascript asynchronous vs. synchronous execution
* [Part 11:](https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-11-javascript-switch-statement-and-computing-owned-delegated-and-received) Javascript "switch" statement and computing owned, delegated, and received Steem Power
* [Part 12:](https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-12-splitting-the-html-file-into-multiple-files)  Splitting the HTML file into HTML, CSS, and js files


In [part 10 of this series](https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-10-calculating-the-steem-power-and-javascript-asynchronous-vs-synchronous), I discussed asynchronous vs. synchronous communications and how fetching data from the remote Steemit database is an asynchronous operation.  Javascript normally does not wait for data to return from a fetching operation before it passes execution to other lines of code.  The steem-js API functions that we have discussed ("getAccounts()" and "getDynamicGlobalProperties()") handle this issue by providing a callback parameter to which the user can pass a function with instructions to execute after the data is returned.  This is an older way of structuring asynchronous code with nested callbacks.  A newer way is to use the [Promise object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) in which asynchronous operations are wrapped in the Promise object which has a [“then()” method](ttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) which contains a user-supplied function to run after the data is returned. 

### steem-js methods that return Promises
steem-js provides functions that have a camel-case "Async" affixed to them.  So, for example, there is a "getAccountsAsync()" function that does what the regular "getAccounts()" does but it returns a Promise and doesn’t expect to have a callback passed to it.  
The getAccounts() method:
```
steem.api.getAccounts(['ned', 'dan'], function(err, result) {
	console.log(err, result);
});
```
does the same thing as:
```
const accountPromise = steem.api.getAccountsAsync(['ned', 'dan']);
accountPromise.then(function(result,err){
  console.log(err,result);
});
```
or
```
steem.api.getAccountsAsync(['ned', 'dan']).then(function(result,err){
  console.log(err,result);
});
```
or
```
steem.api.getAccountsAsync(['ned', 'dan']).then((result,err) =>{
  console.log(err,result);
});
```
Notice that the order of "err" and "result" is reversed in the nested callback structure compared to the Promise.then() structure.  

"getDynamicGlobalProperties()" has no argument besides a callback so "getDynamicGlobalPropertiesAsync()" is called like this:
```
const dgp = getDynamicGlobalPropertiesAsync();
```
and the variable named "dgp" is a Promise object.

steem-js achieves returning the promise by [wrapping the functions in a Promise object](https://github.com/steemit/steem-js/blob/master/src/api/index.js) using [bluebird](http://bluebirdjs.com/docs/getting-started.html).  The methods (functions) available that return promises are listed [in the steem-js code](https://github.com/steemit/steem-js/blob/master/src/api/methods.js).  The listing contains underscores in the method names because the steem-js library is really a javascript interface to the [steem Appbase API](https://developers.steem.io/apidefinitions/#apidefinitions-condenser-api).  The names are made camelcase and “Async” is appended in the js API. 

### Promises
[Javascript Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) are special kinds of objects that wrap asynchronous operations so that you can specify what to do after and only after the asynchronous operation finishes.  Sometimes the asynchronous operation returns a useful result and sometimes it doesn’t.  When the useful result (usually data) can not be returned, the Promise is considered to be “rejected” and the ["Promise.catch()"](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch) method is used to insert error handling code.  We won’t deal with errors yet.  We will assume that the Promise is “resolved” and that the data is returned properly.  Instead of executing a callback when the data is returned, a function in the Promise's “then()” method can be executed and if the function in the "then()" method also returns a Promise, a Promise "chain" can be created.

The function in the "Promise.then()" method can be passed one or two arguments.  The first argument is always the result of  a "resolved" Promise and the second argument can be an error if the Promise was rejected.

For example:
```
steem.api.getDynamicGlobalPropertiesAsync().then(function(resolve,reject){
  console.log(resolve,reject);
});
```
or
```
steem.api.getDynamicGlobalPropertiesAsync().then(function(resolve){
  console.log(resolve);
});
```
The arguments to the function in the "then()" method do not have to be “resolve” or “reject”.  Any name could be used for the arguments but the first argument will contain a reference to the resolved value of the Promise while the second argument (which is optional) will contain a reference to the rejected value of the Promise if it is rejected.  You could just as well write this:
```
steem.api.getDynamicGlobalPropertiesAsync().then(function(goodResult, badError){
  console.log(goodResult,badError}
); 
```
and get the same output to the console.  

### Promise chain

Now I will show how to place our previous nested API calls in a Promise chain.  The nested API calls are:
```
steem.api.getDynamicGlobalProperties(function(err,result){
          computeSPV(result);
          steem.api.getAccounts([userInputs.sUser], function(err,result){
            var userData = result[0];
            var dataToTable = generateTableData(userData,computedValues.steemPerVests);
            var theText = generateTable('Metric', 'Value',dataToTable);
            htmlElements.dataView.innerHTML = theText;
          });
});
```
The corresponding Promise chain is:
```
steem.api.getDynamicGlobalPropertiesAsync()
          .then((globalProps)=>{
            computeSPV(globalProps);
            return steem.api.getAccountsAsync([userInputs.sUser]);})
          .then((result) =>{
            var userData = result[0];
            var dataToTable = generateTableData(userData,computedValues.steemPerVests);
            var theText = generateTable('Metric', 'Value',dataToTable);
            htmlElements.dataView.innerHTML = theText;
});
```

The function in the first "then()" method of the Promise returned by "getDynamicGlobalPropertiesAsync()" returns a Promise because it returns "getAccountsAsync()" which is a Promise.  Because that first "then()" method returns a Promise, the second "then()" method will wait for that Promise to resolve or reject before it executes its code.

### Promise.all()

The Promise object also has a method called [“Promise.all()”](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).  An array of Promises can be passed to the "all()" method and an array of results will be returned when the Promises have resolved or rejected.  Using "Promise.all()", the Promise chain can be restructured to return both the data from "getDynamicGlobalProperties()" and "getUserAccounts()" in an array and the "then()" method can be called to do operations on those two data objects.  Like so:

```
Promise.all([steem.api.getDynamicGlobalPropertiesAsync(),
  steem.api.getAccountsAsync([userInputs.sUser])])
            .then((outputs)=>{
              computeSPV(outputs[0]);
              var userData = outputs[1][0];
              var dataToTable = generateTableData(userData, computedValues.steemPerVests);
              var theText = generateTable('Metric', 'Value',dataToTable);
              htmlElements.dataView.innerHTML = theText;
});
```

The result of the first Promise is put in the first element of the resolved array and the result of the second Promise is put in the second element of the resolved array.  The result of the second Promise is an array of users' account data so the first element of that array must be selected using '[0]' to retrieve the user account data.  If the account data of more than one user was retrieved using "getAccountsAsync()", 'outputs[1][1]' would be used to access the user account data of the second user.  The account data of a third user would be at 'outputs[1][2]' and so on.


The output from using the "Promise.then()" or the "Promise.all()" methods is the same as nesting the callback functions:

![Screen Shot 2018-10-11 at 3.42.25 PM.png](https://cdn.steemitimages.com/DQmdeyt6LCzGnEWwgFCPFX3A2LrbJrUgVtNHy6ce3sZjLQ1/Screen%20Shot%202018-10-11%20at%203.42.25%20PM.png)
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
properties (23)
authornumberjocky
permlinkviewing-steem-blockchain-data-in-a-web-browser-part-13-using-javascript-promises-with-steem-js-async-methods
categorysteem-js
json_metadata{"tags":["steem-js","programming","steemiteducation","promises","javascript"],"image":["https://cdn.steemitimages.com/DQmdeyt6LCzGnEWwgFCPFX3A2LrbJrUgVtNHy6ce3sZjLQ1/Screen%20Shot%202018-10-11%20at%203.42.25%20PM.png"],"links":["https://github.com/steemit/steem-js","https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-1-very-basic-html","https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-2-very-basic-html-utf-8-meta-tag-and-inline-css","https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-3-very-basic-html-meta-tags-nav-and-footer-bars-divs-and-entities","https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-4-basic-html-forms-scripts-and-the-developer-s-console","https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-5-input-text-into-a-form-and-use-html-id-attributes-to-access-and-modify","https://steemit.com/javascript/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-6-using-the-steem-api-cdn-and-the-getaccounts-function-and-examining-the","https://steemit.com/html/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-7-html-tables-javascript-for-in-loop-css-in-the-html-style-element","https://steemit.com/javascript/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-8-html-css-and-javascript-comments-and-organizing-javascripting-using","https://steemit.com/javascript/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-9-compute-the-voting-power-and-reputation-score-of-a-user-javascript-const","https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-10-calculating-the-steem-power-and-javascript-asynchronous-vs-synchronous","https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-11-javascript-switch-statement-and-computing-owned-delegated-and-received","https://steemit.com/steem-js/@numberjocky/viewing-steem-blockchain-data-in-a-web-browser-part-12-splitting-the-html-file-into-multiple-files","https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise","ttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then","https://github.com/steemit/steem-js/blob/master/src/api/index.js","http://bluebirdjs.com/docs/getting-started.html","https://github.com/steemit/steem-js/blob/master/src/api/methods.js","https://developers.steem.io/apidefinitions/#apidefinitions-condenser-api","https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch","https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all"],"app":"steemit/0.1","format":"markdown"}
created2018-10-16 19:30:03
last_update2018-10-16 19:41:36
depth0
children12
last_payout2018-10-23 19:30:03
cashout_time1969-12-31 23:59:59
total_payout_value53.469 HBD
curator_payout_value17.622 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length11,382
author_reputation2,523,396,045,044
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id73,432,669
net_rshares56,681,460,295,352
author_curate_reward""
vote details (58)
@ilovecoding ·
Hello! Your post has been resteemed and upvoted by @ilovecoding because **we love coding**! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On! 
 ![](https://codingforspeed.com/images/i-love-coding.jpg) 
*Reply !stop to disable the comment. Thanks!*
👍  
properties (23)
authorilovecoding
permlink20181016t193014963z
categorysteem-js
json_metadata{"tags":["ilovecoding"],"app":"ilovecoding"}
created2018-10-16 19:30:15
last_update2018-10-16 19:30:15
depth1
children0
last_payout2018-10-23 19:30:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length323
author_reputation40,845,997,808
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id73,432,686
net_rshares365,591,965
author_curate_reward""
vote details (1)
@postpromoter ·
re-numberjocky-viewing-steem-blockchain-data-in-a-web-browser-part-13-using-javascript-promises-with-steem-js-async-methods-20181017t155837108z
You got a 3.76% upvote from @postpromoter courtesy of @numberjocky!

Want to promote your posts too? Check out the [Steem Bot Tracker website](https://steembottracker.com) for more info. If you would like to support the development of @postpromoter and the bot tracker please [vote for @yabapmatt for witness!](https://v2.steemconnect.com/sign/account-witness-vote?witness=yabapmatt&approve=1)
properties (22)
authorpostpromoter
permlinkre-numberjocky-viewing-steem-blockchain-data-in-a-web-browser-part-13-using-javascript-promises-with-steem-js-async-methods-20181017t155837108z
categorysteem-js
json_metadata{"app":"postpromoter/2.1.1"}
created2018-10-17 15:58:36
last_update2018-10-17 15:58:36
depth1
children0
last_payout2018-10-24 15:58:36
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length394
author_reputation12,722,616,650,811
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id73,490,520
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/payout.png)](http://steemitboard.com/@numberjocky) Award for the total payout received

<sub>_Click on the badge to view your Board of Honor._</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-resteem-and-resteemed-added"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-resteem-and-resteemed-added">SteemitBoard Ranking update - Resteem and Resteemed added</a></td></tr></table>

> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20181020t202947000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2018-10-20 20:29:45
last_update2018-10-20 20:29:45
depth1
children0
last_payout2018-10-27 20:29:45
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,211
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id73,709,264
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@numberjocky/votes.png?201810310903</td><td>You made more than 1250 upvotes. Your next target is to reach 1500 upvotes.</td></tr>
</table>

<sub>_[Click here to view your Board of Honor](https://steemitboard.com/@numberjocky)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/steemfest/@steemitboard/i06trehc"><img src="https://steemitimages.com/64x128/https://ipfs.io/ipfs/QmU34ZrY632FFKQ1vbrkSM27VcnsjQdtXPynfMrpxDFJcF"></a></td><td><a href="https://steemit.com/steemfest/@steemitboard/i06trehc">Be ready for the next contest!</a></td></tr><tr><td><a href="https://steemit.com/halloween/@steemitboard/trick-or-treat-publish-your-scariest-halloweeen-story-and-win-a-new-badge"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/RUyB3u.png"></a></td><td><a href="https://steemit.com/halloween/@steemitboard/trick-or-treat-publish-your-scariest-halloweeen-story-and-win-a-new-badge">Trick or Treat - Publish your scariest halloween story and win a new badge</a></td></tr><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-notifications-improved"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/NgygYH.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-notifications-improved">SteemitBoard notifications improved</a></td></tr></table>

> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20181031t115450000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2018-10-31 11:54:48
last_update2018-10-31 11:54:48
depth1
children0
last_payout2018-11-07 11:54:48
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,914
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id74,403,662
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@numberjocky/votes.png?201811031443</td><td>You made more than 1500 upvotes. Your next target is to reach 1750 upvotes.</td></tr>
</table>

<sub>_[Click here to view your Board of Honor](https://steemitboard.com/@numberjocky)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/steemfest/@steemitboard/the-new-steemfest-award-is-ready"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmeEYkuDHNp3c9dC6Q5s8Wysi8DrXR89FHAFiu5XoQW8Vr/SteemitBoard_header_Krakow2018.png"></a></td><td><a href="https://steemit.com/steemfest/@steemitboard/the-new-steemfest-award-is-ready">The new Steemfest³ Award is ready!</a></td></tr></table>

> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20181103t155220000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2018-11-03 15:52:18
last_update2018-11-03 15:52:18
depth1
children0
last_payout2018-11-10 15:52:18
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,232
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id74,611,020
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@numberjocky/votes.png?201811060504</td><td>You made more than 1750 upvotes. Your next target is to reach 2000 upvotes.</td></tr>
</table>

<sub>_[Click here to view your Board of Honor](https://steemitboard.com/@numberjocky)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/steemfest/@steemitboard/uk1parhd"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmSz7NTFn1sazJvocuqkN7uZFHxAUTJrVYz7zqYEEExXfY/image.png"></a></td><td><a href="https://steemit.com/steemfest/@steemitboard/uk1parhd">SteemFest³ - SteemitBoard Contest Teaser</a></td></tr><tr><td><a href="https://steemit.com/steemfest/@steemitboard/the-new-steemfest-award-is-ready"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmeEYkuDHNp3c9dC6Q5s8Wysi8DrXR89FHAFiu5XoQW8Vr/SteemitBoard_header_Krakow2018.png"></a></td><td><a href="https://steemit.com/steemfest/@steemitboard/the-new-steemfest-award-is-ready">The new Steemfest³ Award is ready!</a></td></tr></table>

> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20181106t065759000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2018-11-06 06:57:57
last_update2018-11-06 06:57:57
depth1
children0
last_payout2018-11-13 06:57:57
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,565
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id74,770,314
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@numberjocky/votes.png?201811120009</td><td>You made more than 2000 upvotes. Your next target is to reach 3000 upvotes.</td></tr>
</table>

<sub>_[Click here to view your Board of Honor](https://steemitboard.com/@numberjocky)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/steemfest/@steemitboard/steemfest3-and-steemitboard-meet-the-steemians-contest"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmeLukvNFRsa7RURqsFpiLGEZZD49MiU52JtWmjS5S2wtW/image.png"></a></td><td><a href="https://steemit.com/steemfest/@steemitboard/steemfest3-and-steemitboard-meet-the-steemians-contest">SteemFest3 and SteemitBoard - Meet the Steemians Contest</a></td></tr></table>

> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20181112t004714000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2018-11-12 00:47:12
last_update2018-11-12 00:47:12
depth1
children0
last_payout2018-11-19 00:47:12
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,273
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id75,120,151
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@numberjocky/votes.png?201812071640</td><td>You made more than 3000 upvotes. Your next target is to reach 4000 upvotes.</td></tr>
</table>

<sub>_[Click here to view your Board of Honor](https://steemitboard.com/@numberjocky)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/5jrq2c-steemitboard-saint-nicholas-day"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/mGo2Zd.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/5jrq2c-steemitboard-saint-nicholas-day">Saint Nicholas challenge for good boys and girls</a></td></tr></table>

> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20181207t173922000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2018-12-07 17:39:21
last_update2018-12-07 17:39:21
depth1
children0
last_payout2018-12-14 17:39:21
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,186
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id76,508,004
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@numberjocky/votes.png?201812240306</td><td>You made more than 4000 upvotes. Your next target is to reach 5000 upvotes.</td></tr>
</table>

<sub>_[Click here to view your Board](https://steemitboard.com/@numberjocky)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/christmas/@steemitboard/christmas-challenge-send-a-gift-to-to-your-friends"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/kf4SJb.png"></a></td><td><a href="https://steemit.com/christmas/@steemitboard/christmas-challenge-send-a-gift-to-to-your-friends">Christmas Challenge - Send a gift to to your friends</a></td></tr></table>

> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20181224t064044000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2018-12-24 06:40:42
last_update2018-12-24 06:40:42
depth1
children0
last_payout2018-12-31 06:40:42
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,199
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id77,303,962
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td>https://steemitimages.com/60x70/http://steemitboard.com/@numberjocky/votes.png?201901051201</td><td>You made more than 5000 upvotes. Your next target is to reach 6000 upvotes.</td></tr>
</table>

<sub>_[Click here to view your Board](https://steemitboard.com/@numberjocky)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20190105t125335000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2019-01-05 12:53:33
last_update2019-01-05 12:53:33
depth1
children0
last_payout2019-01-12 12:53:33
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length756
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id77,912,284
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You received a personal award!

<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@numberjocky/dw-early.png</td><td>DrugWars Early Access<br>Thank you for taking part in the early access of Drugwars.</td></tr></table>

<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@numberjocky) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=numberjocky)_</sub>


**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmYGN7R653u4hDFyq1hM7iuhr2bdAP1v2ApACDNtecJAZ5/image.png"></a></td><td><a href="https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter">Are you a DrugWars early adopter? Benvenuto in famiglia!</a></td></tr></table>

###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20190313t025900000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2019-03-13 02:59:00
last_update2019-03-13 02:59:00
depth1
children0
last_payout2019-03-20 02:59:00
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,093
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id81,190,168
net_rshares0
@steemitboard ·
Congratulations @numberjocky! You received a personal award!

<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@numberjocky/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>

<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@numberjocky) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=numberjocky)_</sub>


**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmYGN7R653u4hDFyq1hM7iuhr2bdAP1v2ApACDNtecJAZ5/image.png"></a></td><td><a href="https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter">Are you a DrugWars early adopter? Benvenuto in famiglia!</a></td></tr></table>

###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-numberjocky-20190318t202614000z
categorysteem-js
json_metadata{"image":["https://steemitboard.com/img/notify.png"]}
created2019-03-18 20:26:15
last_update2019-03-18 20:26:15
depth1
children0
last_payout2019-03-25 20:26:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,072
author_reputation38,975,615,169,260
root_title"Viewing Steem Blockchain Data in a Web Browser, Part 13: Using Javascript Promises with steem-js "Async" methods"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id81,534,946
net_rshares0