为了账号安全,请及时绑定邮箱和手机立即绑定

在expressjs fetch中嵌套异步/等待

在expressjs fetch中嵌套异步/等待

慕虎7371278 2021-09-30 19:28:38
到目前为止,我的 API 中间件代码可以正常工作。我真的很想确保我的快递服务器中没有任何阻塞调用。所以我还制作了包含异步获取的函数。我的问题是,这有必要吗?因为实际上第一个 await 应该已经解锁了我的快递服务器,对吗?这是代码:var express = require('express')var router = express.Router()const asyncMiddleware = require('./utils/asyncMiddleware');async function fetchCall(URL, bodyJson, wpToken) {          try {                return await fetch(URL, {            method: "POST",            credentials: "same-origin",            headers:  {                "Authorization": "Bearer " + wpToken,                "Content-Type": "application/json",                "Accept": "application/json"            },            body: bodyJson    });    } catch (error) {               return {status:544, error:error};    }}router.post("/registerVendor", asyncMiddleware(async (req, res, next) => {                  const response = await fetchCall(myApiUrl, req.body, 1)    return res    .status(response.status)    .send({ data: response});}));module.exports = router
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

如果问题是,你必须把你fetch在一个单独的async功能,答案是否定的,你不具备对。它可能对你有用,但你没有必要。正如你所说,如果你直接等待fetch承诺,那将结束你的async路由回调的同步部分。

我的问题是,如果这个函数(在我的代码示例中为“fetchCall”)必须是异步的。

不,它没有。它甚至不必返回承诺,因为您可以使用await任何值。例如,以下按顺序记录 A、B、C、D 和 E:

async function foo() {

    console.log("B");

    await 42;

    console.log("D");

}


console.log("A");

foo()

.then(() => {

    console.log("E");

})

.catch(error => {

    console.error(error);

});

console.log("C");

在你的情况下,当然,你想返回一个承诺。:-) 这会起作用:


function fetchCall(URL, bodyJson, wpToken) {      

    return fetch(URL, {

        method: "POST",

        credentials: "same-origin",

        headers:  {

            "Authorization": "Bearer " + wpToken,

            "Content-Type": "application/json",

            "Accept": "application/json"

        },

        body: bodyJson

    })

    .catch(error => ({status:544, error:error}));

}

也就是说,async/的优点await是它可以使用我们熟悉的同步代码中的分支和循环结构编写异步代码......


查看完整回答
反对 回复 2021-09-30
  • 1 回答
  • 0 关注
  • 231 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信