Visit nodes in the tree asynchronously and sequentially
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
test
.gitignore
LICENSE
README.md
package.json

README.md

Tree Visitor Async

Visit nodes in the tree asynchronously and sequentially. Support promises.

Asynchronous version of Tree Visitor. Actions can return a promise and .visit() returns a promise.

API

var fs = require('fs');
var Q = require('q');
var VisitorAsync = require('tree-visitor-async');
var nodes = [
    { type: 'import', value: 'path/to/file1' },
    { type: 'import', value: 'path/to/file2' },
];

function MyVisitorAsync() {}
MyVisitorAsync.prototype = new VisitorAsync();

MyVisitorAsync.prototype.visit_import = function (importNode) {
    var deferred = Q.defer();
    fs.readFile(importNode.value, 'utf8', deferred.makeNodeResolver());
    return deferred.promise.then(function (content) {
        console.log(content);
    });
};

new MyVisitorAsync().visit(nodes).then(function () {
    console.log('done');
});

Methods are passed to the returned promise as fulfill callbacks. So, for example, if a method throws an error or returns a rejected promise, subsequent nodes won't be visited.

this keyword in the fulfill & reject callbacks refers the created visitor object (e.g., new MyVisitorAsync() in the previous example).