Node.js 使用nodejs和restapi调用的异步处理&;快速序列错误
我使用RESTAPI服务访问运行程序的节点,发现async和Wait没有保留序列。这段代码与func中的第二个api调用一起工作。我认为wait和async与第二个调用的顺序不一致,这导致了问题 我在没有第二个api调用的情况下使用func进行了测试,序列很好,因此问题与生成的CCAPI承诺有关。我认为“then”是不正确的。此外,func中访问慈善API的代码是独立工作的,因此实际代码也在整个代码中工作和运行,但顺序不一致 谢谢你的帮助Node.js 使用nodejs和restapi调用的异步处理&;快速序列错误,node.js,api,asynchronous,Node.js,Api,Asynchronous,我使用RESTAPI服务访问运行程序的节点,发现async和Wait没有保留序列。这段代码与func中的第二个api调用一起工作。我认为wait和async与第二个调用的顺序不一致,这导致了问题 我在没有第二个api调用的情况下使用func进行了测试,序列很好,因此问题与生成的CCAPI承诺有关。我认为“then”是不正确的。此外,func中访问慈善API的代码是独立工作的,因此实际代码也在整个代码中工作和运行,但顺序不一致 谢谢你的帮助 async function checkCharityA
async function checkCharityAPI(searchTerm) {
const args = { APIKey: myAPIKey, strSearch: searchTerm };
ccAPI.GetCharitiesByName(args).then(function(result) {
var charityResult = JSON.stringify(result);
var charityResultJson = JSON.parse(charityResult);
console.log(charityResultJson["GetCharitiesByNameResult"]);
return charityResultJson;
}).catch(function(err) {
console.log(`Call to ${err.operationName} failed with error: ${err.err}`);
return null;
});
}
app.post("/api/checkcharitytest", asyncHandler(async (req, res, next) => {
var charitySearch = req.body.charitysearch;
console.log("start api call")
var charityResult = await checkCharityAPI(charitySearch);
console.log("end api call")
res.json({ "charityResult": charityResult})
}));
加成-
我也试过这个-
var charitySearch = req.body.charitysearch;
console.log("start api call")
// var charityResult = await checkCharityAPI(charitySearch);
checkCharityAPI(charitySearch).then(function(result) {
console.log("result")
console.log(result);
res.json({ "charityResult": result})
}).catch(function(err) {
console.log(`Call to ${err.operationName} failed with error: ${err.err}`);
});
console.log("end api call")
此外,我还添加了这个-然后通过返回值为null来更正seq,尽管它被填充在func中-
async function checkCharityAPI(searchTerm) {
const args = { APIKey: myAPIKey, strSearch: searchTerm };
await ccAPI.GetCharitiesByName(args).then(function(result) {
var charityResult = JSON.stringify(result);
var charityResultJson = JSON.parse(charityResult);
console.log(charityResultJson["GetCharitiesByNameResult"]);
return charityResultJson["GetCharitiesByNameResult"];
}).catch(function(err) {
console.log(`Call to ${err.operationName} failed with error: ${err.err}`);
return null;
});
}
ccAPI.GetCharitiesByName(args)
似乎会返回一个承诺,但checkCharityAPI
不会等待它
您可以使用访问它,然后改为使用/catch
因此,由于async
关键字返回的承诺完全独立于ccAPI.GetCharitiesByName(args)
返回的承诺,我尝试了这个方法,但效果相同(不是在seq中)-var charitySearch=req.body.charitySearch;console.log(“启动api调用”)//var charityResult=wait checkCharityAPI(charitySearch);checkCharityAPI(charitySearch).then(函数(结果){console.log(“结果”)console.log(结果);res.json({“charityResult”:result}).catch(函数(err){console.log(调用${err.operationName}失败,错误为:${err.err}
);});log(“结束api调用”)@TrevorLeeOakley——这正是同样的问题。您需要更改checkCharityAPI
函数本身。感谢您的贡献。我在被调用的func中添加了wait,现在seq很好,但返回值为null。这让我很困惑,因为seq看起来是正确的。我在问题中添加了新代码作为编辑。这不应该返回null
。它应该返回undefined
,因为checkCharityAPI
没有return
语句。最终有效。我假设被调用func中的wait中的返回将返回到调用func。我把它移到了最后,所有的工作都完成了。