承诺的节点模式
Node pattern for promises
我有一个节点问题。我想调用一个数据访问对象和可能的其他内部,一旦完成渲染翡翠模板
例如:
provider1.getData(args, function(error, results) {
/* do something with each result element */
for(int i = 0l i < results.length; i++) {
provider2.getData(args, function(error, items) {
store.push(items);
});
}
});
/* Here I want to ensure that the above operations are complete */
result.render( .... , {
data:store
});
基本上,我想确保在用数据呈现模板之前完成数据检索。目前,当呈现发生时,变量存储还没有被填充。我已经看了看起来很有希望的promises
。有没有人有一个整洁的解决方案,将我的代码示例转换为同步结构?
这是一个承诺的答案(假设是Bluebird)。我觉得这样干净多了:
// convert to promise interface, it's possible to do this on a single method basis
// or an API basis, it depends on your case - it's also _very_ fast.
Promise.promisifyAll(Object.getPrototypeOf(provider1.prototype));
Promise.promisifyAll(Object.getPrototypeOf(provider2.prototype));
//note the async suffix is added by promisification.
provider1.getDataAsync(args).then(function(results) {
return Promise.map(results,provider2.getDataAsync.bind(provider2));
}).then(function(results){
//results array here, everything is done and ready,
});
与承诺一样,如果您有错误,您可以简单地throw
。
你应该尝试使用async库。
provider1.getData(args, function(error, results) {
/* do something with each result element */
async.each(results,
function(result, cb) { // called for each item in results
provider2.getData(args, function(error, items) {
store.push(items);
cb(error);
});
},
// final callback
function (err) {
if (!err) {
/* Here I want to ensure that the above operations are complete */
result.render( .... , {
data:store
});
}
}
);
}
相关文章:
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- Javascript,访问一个主要对象模块模式中的每个对象
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 节点控制台的共同描述模式
- 节点.js中的模型-视图-控制器模式
- 节点 JS / Mongo 插入而不匹配模式
- 定义节点 js 的模式路由
- 将数据绑定到 D3 中的父节点,而不是选择 -- 模式
- 节点模块导出模式 - 这是正确的吗?
- 节点.js中模块模式的最佳实践
- 除了.spec.js之外的每个.js文件的节点glob模式
- JS插入两个连续的文本节点在一个跨度不当时,不在调试模式
- 节点的过程.stdin需要多次按键以原始模式发出数据
- 从输入控件检索特定模式类型的子节点
- oboe.js-模式来选择特定的节点,而不是所有匹配的节点
- 承诺的节点模式