I have a uniq issue. I have JSON data which represents the steps in generating a promise.
[
{
action: 'wait'
},
{
action: 'screenshot'
}
]
Now I am generating this promise with Bluebird.
var pr = require('bluebird/js/main/promise')();
var R = require('bluebird');
var Worker = {
open: function () {
return new pr(function (resolve, reject) {
resolve('opened');
});
},
wait: function (milliseconds) {
return pr.delay(milliseconds);
},
screenshot: function (milliseconds) {
return new pr(function (resolve, reject) {
resolve('take screenshot');
});
}
}
var defers = [];
Worker.open();
JSON.forEach(function (vl) {
var defer = R.defer();
defers.push(defer.promise);
Worker[vl.action]().then(function () {
// do something
defer.resolve();
});
});
R.all(defers).then(function () { console.log('finished');});
Now this doesn't work, because promises are not chained. I was suggested that I chain them.
var pr = require('bluebird/js/main/promise')();
var R = require('bluebird');
var Worker = {
open: function () {
return new pr(function (resolve, reject) {
resolve('opened');
});
},
wait: function (milliseconds) {
return pr.delay(milliseconds);
},
screenshot: function (milliseconds) {
return new pr(function (resolve, reject) {
resolve('take screenshot');
});
}
}
var defers = [];
var chain = Worker.open();
JSON.forEach(function (vl) {
var defer = R.defer();
defers.push(defer.promise);
chain = chain[vl.action]().then(function () {
// do something
defer.resolve();
});
});
R.all(defers).then(function () { console.log('finished')});
But this also doesn't work, any suggestions on how to generate a promise based function from JSON data?