You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function仅返回错误响应不返回正常执行结果问题排查

问题根因
  • 你将Azure Function入口函数声明为async类型,但内部调用的addUser是基于回调的异步方法,async函数执行时不会等待回调触发,会直接完成执行,runtime会提前回收执行上下文,导致成功场景下context.res还没赋值函数就已经结束,自然不会返回201响应。
  • async模式的Azure Function不需要调用context.done()方法,该方法是回调模式下用来标记执行结束的,混用两种模式会导致执行逻辑异常。
修复方案

方案1:改用回调模式入口(改动最小)

直接去掉入口函数的async声明即可,修改后的index.js代码:

const insertUser = require('./db/insertUser')
module.exports = function (context, req) {
    insertUser.addUser(req.body,(status,res1)=>{
        context.res={
            status,
            body: res1
        };
        context.done();
    })
}

方案2:异步方法Promise化,适配async入口(更符合现代JS编码规范)

先修改insertUser.js把addUser改成返回Promise的方法:

require('./dbconnect')
const user = require('./utill/user')
const addUser = (body) =>{
    return new Promise((resolve) => {
        const User = new user(body)
        User.save((error,result)=>{
            if(result){
                resolve({status:201, data:result})
            }
            else{
                resolve({status:401, data:error})
            }                     
        })
    })
}
module.exports.addUser = addUser

再修改index.js用await调用:

const insertUser = require('./db/insertUser')
module.exports = async function (context, req) {
    const {status, data} = await insertUser.addUser(req.body)
    context.res={
        status,
        body: data
    };
}

内容的提问来源于stack exchange,提问作者ShahulRiyaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:45:05