我试图返回用从API接收到的值创建的列表到调用它的地方。我使用的承诺,以确保函数返回值后,它从调用API的值。为了更好地解释代码,我有一个调用getNamedEntity
的函数callAPI
。最后,我想让callAPI
在getNamedEntity
中得到request.post()
的结果。但是,当我分别在每个函数中使用console.log("outside " + result)
和console.log("inside doRequest " + result)
进行测试时,我得到Promise对象和未定义。
function callAPI(text) {
const result = getNamedEntity(text);
console.log("outside " + result);
}
async function getNamedEntity(text) {
var requestJson = {
...
};
var options = {
...
};
function doRequest(options) {
return new Promise(function (resolve, reject) {
request.post(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
const result = resolve(body);
console.log("inside doRequest " + result);
} else {
reject(error);
}
});
});
}
doRequest(options)
.then((body) => {
var entityList = [];
const obj = JSON.parse(body);
const words = obj.return_object.sentence[0].NE;
for (var word of words) {
entityList.push(word.text);
}
return entityList;
})
.catch((error) => {
console.log(error);
});
}
outside [object Promise]
inside doRequest undefined
console.log("outside " + result)
返回一个promise对象,因为您忘记了await
getNamedEntity(text);
,或者,将console.log
放在.then
中,如getNamedEntity(text).then(result => console.log(result));
console.log("inside doRequest " + result);
返回undefined,因为resolve
函数返回void,即它不返回任何东西。更改为console.log("inside doRequest " + body);
或将console.log
移动到.then((body)
部分