我知道以前有很多类似的问题,但我已经尝试过每一个问题,并且每次尝试都会遇到这个问题。所以我正在做的是我有一个名为data.js的文件,它包含一个从web api获取json数据并返回Json解析字符串的函数。我有另一个调用此函数的文件,我只是试图在控制台上调试结果。但每次我运行该函数时,我都会在控制台上“未定义”,即代码异步运行,并且即使在获取之前值也会返回。 这是我的代码:
data.js
module.exports = {
holidays: function(x,y,z)
{
function intialize()
{
return new Promise(function(resolve, reject) {
Request.post({
"headers": { "content-type": "application/json" },
"url": //someurl,
"body": JSON.stringify({//some input})
}, function(err, resp, body) {
if (err)
{
reject(err);
}
else
{
resolve(JSON.parse(body));
}
})
})
}
var Request = require("request");
var json_content="";
var req = intialize();
req.then(function(result) {
console.log(result);//getting correct answer here
json_content=result;
//I know I've to return the value somewhere here but how do i do it
}, function(err) {
console.log(err);
});
return(json_content);
}
};
调用函数中的代码:
var h= require(__dirname+'/data.js');
console.dir(h.holidays('x','y','z'));//getting undefined
答案 0 :(得分:2)
非常简单。您必须使用回调函数来获取结果。
module.exports = {
holidays: function(x,y,z,callback){
function intialize()
{
return new Promise(function(resolve, reject) {
Request.post({
"headers": { "content-type": "application/json" },
"url": //someurl,
"body": JSON.stringify({ })
},
function(err, resp, body) {
if (err)
{
reject(err);
}
else
{
resolve(JSON.parse(body));
}
})
})
}
var Request = require("request");
var json_content="";
var req = intialize();
req.then(function(result) {
console.log(result);
json_content=result;
callback(json_content); // sending response from here via callback variable
}, function(err) {
console.log(err);
});
return(json_content);
}
};
你必须得到像
这样的回复var h= require(__dirname+'/data.js');
h.holidays('x','y','z',function(res){
console.log(res);
})
答案 1 :(得分:1)
// Child.js
...
componentDidMount() {
const { register } = this.props
register(this.verify)
}
verify(values) {
const { hash, verify } = this.props
return { [hash]: verify(values[hash], values) }
}
...
// Parent.js
constructor(props)
super(props)
this.tests = []
this.state = {
value: null,
// other initial state
}
...
}
register(verifyFunc) {
this.tests.push(verifyFunc)
}
render() {
const { value } = this.sate
let result = {}
this.tests.forEach(test => result = { ...result, ...test(value) })
return (
<Provider
value={{
...this.state,
verificationResults: result,
register: this.register,
// other things...
}}
>
{this.props.children}
</Provider>
)
}
你必须得到像
这样的回复module.exports = {
holidays: function(x,y,z)
{
function intialize()
{
return new Promise(function(resolve, reject) {
Request.post({
"headers": { "content-type": "application/json" },
"url": //someurl,
"body": JSON.stringify({//some input})
}, function(err, resp, body) {
if (err)
{
reject(err);
}
else
{
resolve(JSON.parse(body));
}
})
})
}
}
var Request = require("request");
var json_content="";
return new Promise(function(resolve, reject) {
intialize()
.then(function(result) {
resolve(result);
})
.catch(function(err) {
reject(err);
});
});
};