用promise处理promise的数组结果
Process an array result of a promise with a promise
我有以下以同步方式工作的代码:
function getFoldersOf(dir) {
return fs.readdirSync(dir).map(p => path.join(dir, p)).filter(p => fs.lstatSync(p).isDirectory());
}
现在考虑使用这些API(提供的函数在节点中不存在。这些是低道德的,我必须编写它们):
fs.readdirSync -> fs.readdirAsync
path.join -> path.joinAsync
fs.lstatSync -> fs.lstatAsync
我的问题是,将此函数转换为异步的正确方法是什么?
PS:我怀疑我可以通过反应式扩展轻松解决这个问题
一个选项是实现您的文件系统API,这样每个操作都会返回一个bluebird
承诺,该承诺已经提供了.map()
和.filter()
等帮助程序。
例如,要将Node fs
API转换为使用bluebird
promise的API,可以使用.promisifyAll()
:
// node-fs.js
var Promise = require('bluebird');
module.exports = Promise.promisifyAll(require('fs'));
要使用此功能(在Node中运行应用程序时):
// app.js
var path = require('path');
var fs = require('./node-fs');
function getFoldersOf(dir) {
return fs.readdirAsync(dir)
.map( p => path.join(dir, p))
.filter(p => fs.lstatAsync(p).then(d => d.isDirectory()));
}
相关文章:
- 如何为javascript promise进行阻塞并返回解析结果
- async问题,JS Promise无法返回结果,但可以使用console.log
- 使用Node中的Q promise库对值数组顺序调用/执行相同的函数;并返回带有结果的新数组/集合
- 在多维数组中获取promise的结果
- 如何访问AngularJS promise链中上一个promise的结果
- 如何使用 Parse.promise javascript 定义一个承诺数组并获取结果数组 [parse.com]
- 在返回结果之前,我如何等待 jQuery.ajaxComplete in promise.done
- 使用 promise 将异步函数的结果作为“变量”返回
- JavaScript原生Promise对两个结果执行回调
- 用promise处理promise的数组结果
- ES7使用wait生成器从一系列promise中获取结果
- 为什么defered.promise在defered.resolve(myobject)之后的结果与myobject不同
- 当你想要所有结果而不管是否被拒绝时,用什么代替Promise.all()
- 什么'这是处理promise对象中错误结果的正确方法
- 如何在promise解析时手动将promise的结果获取到作用域变量中
- JS Promise无法返回结果
- request-promise -我如何从函数外的Promise获得结果?
- 承诺的循环.如何检测哪个promise现在返回结果
- 在下一次循环迭代之前等待promise结果
- Promise API -结合2个异步调用的结果