Как исправить «Выберите, чтобы вернуть обещание или позвонить« сделано »» в функциях Azure с помощью Koa - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь заставить Коа работать с лазурными функциями.Приложение "hello world" уже работает через koa, но во время работы dev-сервера azure выдает ошибку:

Choose either to return a promise or call 'done'.  Do not use both in your script.

Использование версии узла 10.14.1

Код довольно простКак видите, я никогда не вызываю context.done() явно.Может ли Коа как-то вызвать эту функцию?Удаление всех обещаний не вариант из-за природы коа.Когда я попытаюсь выполнить вызов, произойдет следующее сообщение об ошибке: Error: 'done' has already been called. Please check your script for extraneous calls to 'done'.

const Koa = require('koa')
const app = new Koa()


async function createServer(app, context, req){

    app.use(async function(ctx) {
        ctx.body = 'Hello World';
    })

    return app.callback()(req, context.res)

}

module.exports = async function (context, req) {
    return await createServer(app, context, req)
}

Приложение работает правильно, но я полагаю, что его плохой совет игнорировать сообщение об ошибке.

1 Ответ

0 голосов
/ 12 февраля 2019

Хорошо, я понял это.Это похоже на взломать, но это работает.

const Koa = require('koa')
const app = new Koa()


async function createServer(app, context, req){

    app.use(async function(ctx) {
        ctx.body = 'Hello World';
    })

    //remove done fn from context obj so koa can not call it
    context.done = () => {}

    return app.callback()(req, context.res)

}

module.exports = async function (context, req) {
    return createServer(app, context, req)
}

Хитрость заключается в переназначении context.done.

...