Javascript 从节点js异步函数进行多个回调

Javascript 从节点js异步函数进行多个回调,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,如何从异步函数中返回异步函数多次调用返回的数据对象 我正在尝试这样实现: var figlet = require('figlet'); function art(dataToArt, callback) { var arry[]; figlet(dataToArt, function(err, data) { if (err) { console.log('Something went wrong...');

如何从异步函数中返回异步函数多次调用返回的数据对象

我正在尝试这样实现:

var figlet = require('figlet');

function art(dataToArt, callback)
{ 

var arry[];

    figlet(dataToArt, function(err, data) { 
        if (err) { 
            console.log('Something went wrong...'); 
            console.dir(err); 
            return callback(''); 
        } 
    arry[0] = data;
        callback(arry);
    });


figlet(dataToArt, function(err, data) { 
        if (err) { 
            console.log('Something went wrong...'); 
            console.dir(err); 
            return callback(''); 
        } 
    arry[1] = data;
        callback(arry);
    });

} 


art('Hello World', function (data){
    console.log(data);
});
我如何才能正确地执行它,我搜索了又搜索,但找不到解决方案


另外,我正在使用

我不知道您是否可以使用外部模块,但您可以使用

与任何常规模块一样,使用npm Install tiptoe安装它,基本上如下所示:

var tiptoe = require('tiptoe')

function someAsyncFunction(obj, callback) {
  // something something
  callback(null, processedData);
}

tiptoe(
  function() {
    var self = this;
    var arr = ['there', 'are', 'some', 'items', 'here'];
    arr.forEach(function(item) {
      someAsyncFunction(item, self.parallel());
    });
  },
  function() {
    var data = Array.prototype.slice.call(arguments);
    doSomethingWithData(data, this);
  },
  function(err) {
    if (err) throw (err);
    console.log('all done.');
  }
);
someAsyncFunction()
是要调用的异步函数,用于执行某些操作,并使用参数
error
data
调用
callback
参数。
数据
参数将作为数组项传递给
tiptoe
流上的以下函数。

自己做的:)

var figlet=require('figlet');
函数调用(列表、迭代器、回调){
var-nextItemIndex=1;
功能报告(){
nextItemIndex++;
if(nextItemIndex==list.length)
回调();
其他的
迭代器([list[0],list[nextItemIndex]],报表);
}
迭代器([list[0],list[1]],报表);
}
var FinalResult=[];
WaterWallover([“hello”、“Standard”、“Ghost”],函数(路径、报告){
text(路径[0],{font:path[1]},函数(err,data){
如果(错误){
FinalResult.push(“字体名称错误,请尝试帮助”);
报告();
返回;
}
数据='。\n'+数据+';
最终结果推送(数据);
报告();
});
},函数(){
console.log(FinalResult[0]);
console.log(FinalResult[1]);
});

为了澄清您想要什么:您不止一次异步调用某个对象,并且希望将两个/所有响应都放入一个数组中,并且只在填充了两个/所有项的数组中调用回调一次?是的,这正是我想要研究的承诺和问题。我无法实现它。。我是用电脑做的
var figlet = require('figlet');

function WaterfallOver(list, iterator, callback) {

    var nextItemIndex = 1;
    function report() {
        nextItemIndex++;
        if(nextItemIndex === list.length)
            callback();
        else
            iterator([list[0],list[nextItemIndex]], report);
    }
    iterator([list[0],list[1]], report);
}

var FinalResult = [];

WaterfallOver(["hello","Standard","Ghost"], function(path, report) {
    figlet.text(path[0], { font: path[1]  }, function(err, data) {
      if (err) {
          FinalResult.push("Font name error try help");
          report();
          return;
      }
      data = '<pre>.\n' + data + '</pre>';
      FinalResult.push(data);
      report();
  });
}, function() {
    console.log(FinalResult[0]);
    console.log(FinalResult[1]);
});