我从远程表中获取值,我将其推入数组:
function getrecords(base, view) {
var tab = [];
var jsonTab = {};
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')
});
});
//console.log(tab);
return tab;
});
}
现在,使用promiseJs我做了一个promise函数,因为调用是异步的:
function readRecords(base, view){
return new Promise(function(fulfill, reject){
getrecords(base, view, function (err, res){
if(err) reject(err);
else fulfill(res);
});
});
}
现在我要做的就是使用该标签! 但是当我创建一个像这样的var并且控制台记录它时:
var tabRecord= readRecords(base, view);
console.log(tabRecord);
这是cmd中的结果:
承诺{_45:0,_81:0,_65:null,_54:null}
它的意思是什么?为什么我没有显示标签?我该怎么做才能获得函数的返回值?
谢谢大家。
ps:我帮助mysefl使用这个网站https://www.promisejs.org/来写下这个承诺。
答案 0 :(得分:2)
您将参数用于传递then
的回调:
readRecords(base, view).then(function(tabRecord) {
// Use `tabRecord` here
});
Promise不会使异步代码同步。它们只是使异步代码更易于使用。
答案 1 :(得分:0)
Getrecords应该返回一个承诺,所以我做了:
function getrecords(base, view) {
return new Promise(function(resolve, reject){
var tab = [];
base('Table 1').select({
view: view
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
//resolve(records);
tab.push({
'Name':record.get('Name'),
'Notes': record.get('Notes')
});
});
fetchNextPage();
resolve(tab);
reject("Nononono");
});
});
}
之后,我可以像这样调用“then
”之后的方法:
getrecords(base, view).then(function(res){return res;}).then(function(res{tabToCSV(res)})
有效。