太多的callback.. nodeJS airtbale api

首先,我是NodeJS的新手,并且想要让我的技能发挥得淋漓尽致。 我在Airtable中有一个表格,想要从中获取所有的元素。 用nodejs的airtable api很容易。 但是我想要做的是将这些元素推送并保存在未来的选项卡中(JSON,excel …)。 为了做到这一点,我使用callbaks,因为呼叫是asynchronous的..我听说了Promise,但对我来说这是非常新的,我几乎没有理解它..这是我现在的代码:

var Airtable = require('airtable'); Airtable.configure({ endpointUrl: 'https://api.airtable.com', apiKey: 'keyKWYJPOEObWhNt2' }); var base = Airtable.base('app4qIwfmG0ZKAdBH'); var view = "Main View"; var tab = []; base('Table 1').select({ view : view}).eachPage(function page(records, fetchNextPage){records.forEach(function(record){ tab.push({ "Name": record.get('Name'), "Notes": record.get('Notes') }); }); fetchNextPage(); pushToArray(tab); }, function done (error){ if(error){ console.log(error); console.log(tab);} }); function pushToArray(tab) { TabToJson(tab); return tab; }; function TabToJson(tab){ console.log(tab); return JSON.stringify(tab); }; 

我怎样才能实现承诺? 这里有必要吗? 我不想结束十几个callback函数。谢谢大家,祝你有美好的一天!

小心这里! 你在正确的轨道上,认识到这个函数是asynchronous的,并且你希望等到每个迭代#eachpage已经解决,然后再写输出你的JSON,就像Promise一样。 但Airtable已经足够提供你正在寻找的东西了:callback

 function done (error){ if(error){ console.log(error); console.log(tab); } } 

将在上次成功调用#fetchNextPage后立即运行。 这是你应该有你的JSON写入逻辑的地方。 你会想要的东西

 function done (error){ TabToJson(tab); if(error){ console.log(error); console.log(tab); } } 

你不需要你的函数pushToArray,因为你已经把每个logging从Airtable推到你的数组“标签”中,每次调用#page。 而且,如果你想做的不仅仅是logging你的JSON输出,你的问题看起来像是这样,你应该看看Node的文件系统库 。 签出fs#writeFile方法。