응용 프로그램을 프로토 타이핑하는 동안 RequireJS를 사용하고 있습니다. 나는 ajax를 통해 json 파일을로드하여 실제 데이터베이스를 "위장"하고있다.AJAX 호출 결과를 AMD 모듈로 사용
이 json 파일을 필요로하는 모듈이 여러 개 있는데, 여러 개의 HTTP 요청이있는 것으로 나타났습니다. 이미 RequireJS를 사용하고 있기 때문에 "이 json 파일을 다른 모듈로로드하지 않을까요?"라고 생각했습니다. 모듈은 객체를 반환 할 수 있으므로 합리적으로 보입니다. 작동하지 않는 내가 무엇을하고있어 왜
// data.js
define(function(require){
const $ = require('jquery')
var data = {}
$.getJSON('/path/to/data.json', function(json_data){
data = json_data
})
// this does not work because getJSON is async
return data
})
// some_module.js
define(function(require){
const my_data = require('data')
console.log(data) // undefined, but want it to be an object
})
내가 이해 :
그래서 나는이 시도했다. 나는 이것을 실제로하는 가장 좋은 방법이 무엇인지는 모르겠다. AMD의-Y가 무엇을 달성하고 싶다 데이터을 반환하려고하기 전에 while (data == null) {}
를 추가
- 변경해서 getJSON을
async: false
- 에 :
것들 내가하고 싶지 않아 내가하려고하는거야? 여기에 더 좋은 접근법이있을 것입니다.
편집
난 그냥이 시도. 그것은 작동하지만, 나는 이것이 좋은 또는 끔찍한 생각이 있는지 확실하지 않습니다 :
// in data.js return $.getJSON('/path/to/data.json') // in some_module.js const my_data = require('data') my_data.then(function(){ console.log(my_data.responseText) // do stuff with my_data.responseText })
내 관심사입니다 (1) 브라우저 지원 (이, 오른쪽 "약속"입니다?)과 (2)의 경우 여러 모듈이 동시에 이것을 수행하면 폭발 할 것입니다.
약속을 사용하는 것이 좋습니다. – SLaks
IE가 약속을 지원하지 않지만 내 편집이 이상하게 IE에서 작동했습니다. 실제로 JQuery의 ['deferred.then()'] (https : // api.)를 호출 한'.then() '을 사용하여 약속을 사용하려는 것 같지만 (데이터가 JQuery 객체로 들어가기 때문에) jquery.com/deferred.then/) 메소드를 사용하여 IE에서 작동하는 이유는 무엇입니까? – Scribblemacher
예; jQuery는 자체 약속 구현 ('지연')을 포함하며 기본 약속을 사용하지 않습니다. – SLaks