我新学习expressjs和axios
我创建了一个文件夹utils并将axios.js文件
const axios = require('axios');
loadDataPesan=async function(opts){
axios.get('localhost/getData', {
params: {
opt: opts,
nis: "123123",
}
})
.then(function (response) {
console.log(response.data.datas) // ITS NORMALLY SHOW THE CORRECT DATA
return response.data.datas; // HERE MY PROBLEM, WHEN I RETURN IT DATA always Promise { }
})
.catch(function (error) {
return error;
});
}
module.exports = { loadDataPesan };
这里是我的app.js文件
const express = require('express');
const expressLayout = require('express-ejs-layouts');
const { loadContact } = require('./utils/contact');
const { loadDataPesan } = require('./utils/axios');
const app = express();
const port = 8899;
app.set('view engine', 'ejs');
app.use(expressLayout);
// BUILTIN MIDDLEWARE
app.use(express.static('public'));
app.get('/contact', (req, res) => {
const contacts = loadContact();
const dataaxio = loadDataPesan("SUBS","912830123");
console.log(dataaxio); // **HERE MY PROBLEM RESPONSE ALWAYS Promise { }**
res.render('contact', {
layout: 'layouts/main-layout',
title: 'Halaman Contact',
contact:contacts,
});
})
如果有人能帮我,我先谢谢你
我尝试在函数中给定异步,但它也是一样的,我尝试回调响应它也是一样的
3条答案
按热度按时间9udxz4iz1#
使用
async/await
等待结果。您可能需要捕获错误。并从
loadDataPesan
函数返回数据jljoyd4f2#
我看到你的代码中有两个问题。
首先,你不需要
await
来返回任何东西。这意味着当
但承诺还没有解决。如果将调用此函数的函数设置为
async
函数,则可以在调用loadDataPesan
函数之前添加await
。这将停止执行代码,直到loadDataPesan
中的promise被解析其次,在
loadDataPesan
中实际上并不返回任何内容。在promise的回调中确实有一个return
语句(then
方法中的函数),但是根本没有返回promise。要解决这个问题,只需在调用
axios
之前添加一个return
6ie5vjzr3#
有几个问题我可以看到->
1.在axios.js文件中,这一行
您没有使用推荐的const关键字。这样写->
或者这样->
1.导出单个函数时,如下导出->
1.正如在其他答案中指出的,如果你在函数的顶部使用using async关键字,请使用async/await语法。将代码 Package 在try-catch块中也是一个很好的做法,可以更好地处理错误。下面是一个如何重构代码的示例,我使用了express模块的Router方法进行路由。您可以在express.Router部分了解更多关于here的信息。
axios.js文件
app.js文件->