У меня есть koa
маршрутизатор, мне нужно вызвать API, где асинхронный возврат результата.Это означает, что я не могу получить свой результат немедленно, API вызовет мой callback url
, когда все будет в порядке.Но теперь я должен использовать его как API синхронизации, что означает, что я должен ждать, пока не будет вызван URL обратного вызова.
Мой маршрутизатор выглядит так:
router.post("/voice", async (ctx, next) => {
// call a API here
const params = {
data: "xxx",
callback_url: "http//myhost/ret_callback",
};
const req = new Request("http://xxx/api", {
method: "POST",
body: JSON.stringify(params),
});
const resp = await fetch(req);
const data = await resp.json();
// data here is not the result I want, this api just return a task id, this api will call my url back
const taskid = data.taskid;
// now I want to wait here until I got "ret_callback"
// .... wait .... wait
// "ret_callback" is called now
// get the answer in "ret_callback"
ctx.body = {
result: "ret_callback result here",
}
})
мой URL обратного вызова выглядит так:
router.post("/ret_callback", async (ctx, next) => {
const params = ctx.request.body;
// taskid will tell me this answer to which question
const taskid = params.taskid;
// this is exactly what I want
const result = params.text;
ctx.body = {
code: 0,
message: "success",
};
})
Так как я могу заставить этот aync
API действовать как sync
API?