Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用nodejs和restapi调用的异步处理&;快速序列错误_Node.js_Api_Asynchronous - Fatal编程技术网

Node.js 使用nodejs和restapi调用的异步处理&;快速序列错误

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

我使用RESTAPI服务访问运行程序的节点,发现async和Wait没有保留序列。这段代码与func中的第二个api调用一起工作。我认为wait和async与第二个调用的顺序不一致,这导致了问题

我在没有第二个api调用的情况下使用func进行了测试,序列很好,因此问题与生成的CCAPI承诺有关。我认为“then”是不正确的。此外,func中访问慈善API的代码是独立工作的,因此实际代码也在整个代码中工作和运行,但顺序不一致

谢谢你的帮助

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。我把它移到了最后,所有的工作都完成了。