我目前正在学习使用API。我从我的Github仓库中检索数据。我试图让脚本将JSON信息加载到githubData变量中。但是当我将githubData变量记录到控制台时,它返回一个空数组。 然而,如果我在加载页面后创建一个具有完全相同功能的新变量,则脚本的工作方式完全正常。 页面加载时,它没有加载实际数据。它加载一个空数组。我意识到这个函数是异步的,所以当我加载页面时,如何让数组不为空? 这是我的代码:
public class DataLakeEventListenerRouteIT extends CamelTestSupport {
@Autowired
private MyRouteBuilder myRouteBuilder;
private MockEndpoint myEndpointMock;
@Override
public boolean isUseAdviceWith() {
return true;
}
@Override
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry registry = super.createRegistry();
//do some required bindings here
return registry;
}
@Before
public void startup() throws Exception {
AdviceWithRouteBuilder mock = new AdviceWithRouteBuilder() {
public void configure() throws Exception {
mockEndpointsAndSkip(myRouteBuilder.MY_ROUTE_URI);
}
};
context.addRoutes(myRouteBuilder);
context.getRouteDefinition(myRouteBuilder.MY_ROUTE_ID)
.adviceWith(context, mock);
myEndpointMock = getMockEndpoint(
"mock:" + myRouteBuilder.MY_ROUTE_URI);
}
@Test
public void timerRouteShouldSendMessage() throws Exception {
// Arrange
context.start();
myEndpointMock.expectedMessageCount(1);
myEndpointMock.assertIsSatisfied();
context.stop();
}
}
答案 0 :(得分:1)
问题在于它的异步调用意味着一旦它触发了请求,它就会转到下一段代码。一旦它到达githubData项仍然是一个空对象,因为还没有收到api响应。
我会在var items = {}
下面实例化githubData变量
像这样
var items = {}
var githubData;
然后在成功:你执行$ .each之后的功能,你可以把
githubData = $.map(items,function(k,v) {
return ("<p>" + k + ": " + v + "</p>");
});
这可以确保api调用已经完成,只要响应带回来,项目就应该有内容