簡體   English   中英

在 node.js 中返回承諾

[英]Return promise in node.js

我嘗試從 API 返回 node.js 中的數據,但我遇到了問題,因為我需要一個異步函數,我無法確定正確使用承諾,我已經嘗試了一切,但我做不到' t 把結果放在 return 里,只放在 console.log 里,有人幫幫我嗎?

const express = require('express')
const MFA = require('mangadex-full-api')

module.exports = {
    async indexManga(req, res) {
         
        const mangalist = MFA.login('DarksGol', 'R@ul1605', './md_cache/').then(async () => {

            manga = []
                await MFA.Manga.search('Kiss').then(results => {
                results.forEach((elem, i) => {   
                    let obj = {}
                    obj.status = elem.status
                    obj.title = elem.title
                    
                    manga.push(obj)
                })
            }).catch(console.error)

            return manga

        }).catch(console.error) 

        console.log(await mangalist)
        return mangalist
    }
}

沒有發生錯誤,只有無限加載請求

我不明白為什么這會導致“請求時無限加載”,但是您可以將代碼大大簡化為

const express = require('express');
const MFA = require('mangadex-full-api');

module.exports = {
    async indexManga(req, res) {
        await MFA.login('DarksGol', 'R@ul1605', './md_cache/')
        const mangaList = [];
        const results = await MFA.Manga.search('Kiss');
        results.forEach(elem => {   
            mangaList.push({
                status: elem.status,
                title: elem.title,
            });
        });
        return mangalist;
    },
};

看起來indexManga是一個端點。 每個端點函數都必須通過發送響應( res.send()、res.json()、res.end() 等)來結束請求-響應循環。 如果indexManga是一個端點,則解決方案是:

...

//return mangalist
res.send(mangalist)

或者

//return mangalist
res.json({ status: "success", message: "logged in successfully" })

如果是中間件:

async indexManga(req, res, next) {
  ...
  //return mangalist
  return next()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM