【发布时间】:2019-11-02 10:33:20
【问题描述】:
我在 'apiCalls.js' 文件中编写了一个函数,并具有以下功能:
function getAllData() {
new Promise(function(resolve, reject) {
async.parallel([
function(callback) {
request('http://urlcall', function(error, response, body) {
if(!error && response.statusCode == 200) {
return callback(null, body);
}
return callback(error || new Error('Response non-200'));
});
},
function(callback) {
request('http://urlcall', function(error, response, body) {
if(!error && response.statusCode == 200) {
return callback(null, body);
}
return callback(error || new Error('Response non-200'));
});
},
],
function(err, results) {
if(err) {
console.log(err);
reject(err);
}
console.log(results);
resolve(results);
});
});
}
然后我在我的 app.js 文件中调用这个函数:
apiCalls.getAllData().then(function(returned) {
console.log(returned);
res.render('home');
});
我收到一个错误,其中返回的值未定义:
TypeError: Cannot read property 'then' of undefined
我不确定我哪里出错了。我已经解决了承诺,然后在 then 函数中使用了该值。我在这里错过了什么吗?我不熟悉使用 Promise 和异步编程,所以我在这里错过了一些关于它应该如何工作的理解?
【问题讨论】:
-
一方面,您没有从
getAllData()函数返回承诺。你可以试试return new Promise ... -
把 promises 和
async一起使用会出错——这两种风格不能很好地混合。请改用request-promise和Promise.all。
标签: javascript node.js asynchronous promise