我正在尝试调用API并使用结果,但是promise结果总是以未定义的形式返回。
我认为这应该是直截了当的,但是我对诺言并不陌生,我花了很多时间试图弄清楚这一点,但没有任何运气。我尝试了很多版本。我想
最初我有这两个功能
//Get the references
function getReferences(articleID) {
var request = new XMLHttpRequest();
request.open("get", "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?dbfrom=pubmed&linkname=pubmed_pubmed_refs&retmode=json&id=" + articleID + "&api_key=0&tool=my_tool2&email=my_email@example.com", false);
request.send();
var obj = JSON.parse(request.responseText);
return obj.linksets[0].linksetdbs[0].links;
}
//use the references
function useReferences(startingArticleID) {
var references = getReferences(startingArticleID);
// do something with the array "references"
}
,此方法运行良好,但有时getReferences
会在API调用完成之前尝试解析。所以我修改了代码,使其看起来像这样(使用Axios尝试帮助API调用)
async function getReferences(articleID) {
let json = await axios.get("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi? dbfrom=pubmed&linkname=pubmed_pubmed_refs&retmode=json&id=" + articleID + "&api_key=0&tool=my_tool2&email=my_email@example.com");
return json;
}
async function useReferences(startingArticleID) {
let references = await getReferences(startingArticleID);
//do something with the array references
}
但是references
始终以undefined
的身份返回,状态为待定。我阅读并尝试了.then()
,但诺言的价值仍然是undefined
。