当我调用rest API并返回响应时,它显示为未定义,但我在console.log此响应中返回
var request = require("request");
function initialize() {
// Setting URL and headers for request
var options = {
url: 'http://postalpincode.in/api/pincode/400605',
json: true
};
// Return new promise
return new Promise(function (resolve, reject) {
// Do async job
request.get(options, function (err, resp, body) {
if (err) {
reject(err);
} else {
resolve(JSON.stringify(body));
}
})
})
}
function main() {
var initializePromise = initialize();
initializePromise.then(function (result) {
return result;
})
}
console.log('', main())
但是当我在控制台上记录此响应时,它会显示正确的输出
var request = require("request");
function initialize() {
// Setting URL and headers for request
var options = {
url: 'http://postalpincode.in/api/pincode/400605',
json: true
};
// Return new promise
return new Promise(function (resolve, reject) {
// Do async job
request.get(options, function (err, resp, body) {
if (err) {
reject(err);
} else {
resolve(JSON.stringify(body));
}
})
})
}
function main() {
var initializePromise = initialize();
initializePromise.then(function (result) {
console.log('', result)
})
}
console.log('', main())
我想要当我调用rest API并返回响应时,它显示正确的输出
答案 0 :(得分:1)
使用async/await
async function main() {
var initializePromise = await initialize();
console.log(initializePromise)
}
答案 1 :(得分:1)
then
范围内的返回不是针对函数main
的返回,而是仅针对诺言的then
范围的返回。您需要像这样返回承诺:
function main() {
var initializePromise = initialize();
return initializePromise.then(function (result) {
return result;
})
}
main().then((result) => console.log('',result));
您无法使sync函数调用异步方法并期望获得其结果。
答案 2 :(得分:0)
我的问题是,为什么要在新的Promise中包装已经来自Promise的返回类型的东西?
您可以这样做:
request.get(endpoint, options).then((response) => console.log(response)).catch((error) => console.log(error));
让我知道在这种情况下的输出是什么。
答案 3 :(得分:0)
当从REST HTTP调用中获取响应时,initializePromise方法的当时解析会在以后阶段解决,即,由于调用async()是异步的,因此在返回main()方法时不会返回该响应。要处理此类代码,您应该使用回调
function main(completionHandler) {
var initializePromise = initialize();
initializePromise.then(function (result) {
completionHandler(result);
})
}
main((result) => { console.log(result)})
或诺言
function main() {
// Return new promise
return new Promise(resolve => {
var initializePromise = initialize();
initializePromise.then(function (result) {
resolve(result);
})
}
}
main().then(result => console.log(result));
答案 4 :(得分:0)
TOP_LEVEL_ROUTES
在主要功能中:
const navigationList = TOP_LEVEL_ROUTES
.map(({ exact = false, path, name }) => (
<Button
component={Link}
to={path}
key={path}
exact={exact}
>
{name}
</Button>
));