>

연구와 여러분의 도움으로 사람들이 Javascript 약속을보다 명확하게 이해하는 데 도움이 될만한 코드를 작성하고 주석을 달 수있었습니다.

제 질문은 JSON 파일 이름을 의도적으로 잘못 입력하여 catch를 트리거하려고 할 때 아무 일도 일어나지 않는다는 것입니다. 오류가 없습니다. 계속하지 마십시오. 아무것도. 왜?

왜 안되 ...

else reject( new Error( 'We could not load the URI: ' + uri ) );

... 던지는?

JSON 파일을 가져올 때 교차 출처 문제없이 시각화 할 수있는 URL

테스트 페이지

의 내용 resultset.json

[
  {
    "PK_USER_TIME_LOG_ID": 120,
    "CLIENT_ID": 111,
    "PROJECT_ID": 222,
    "USER_ID": 465605,
    "UTL_DTSTAMP": "2018-01-15 17:56:06",
    "UTL_LATITUDE": "40.61105890",
    "UTL_LONGITUDE": "-111.89993530",
    "UTL_EVENT": "CLOCK IN",
    "UTL_ACTION": "MEETING",
    "UTL_DURATION": 3
  },
  {
    "PK_USER_TIME_LOG_ID": 122,
    "CLIENT_ID": 111,
    "PROJECT_ID": 222,
    "USER_ID": 465605,
    "UTL_DTSTAMP": "2018-01-15 17:56:19",
    "UTL_LATITUDE": "40.61105890",
    "UTL_LONGITUDE": "-111.89993530",
    "UTL_EVENT": "CLOCK IN",
    "UTL_ACTION": "TRAVEL",
    "UTL_DURATION": 5
  },
  {
    "PK_USER_TIME_LOG_ID": 123,
    "CLIENT_ID": 111,
    "PROJECT_ID": 222,
    "USER_ID": 465605,
    "UTL_DTSTAMP": "2018-01-15 17:56:24",
    "UTL_LATITUDE": "40.61105890",
    "UTL_LONGITUDE": "-111.89993530",
    "UTL_EVENT": "CLOCK IN",
    "UTL_ACTION": "TEAR OUT",
    "UTL_DURATION": 3
  }
]

2018 년 8 월 1 일에 자바 스크립트 약속 코드 업데이트

$(document).ready(function() {
console.log('1. Document is ready.');
// Run the App.
runApplication();
});
// anything we would like to run *** BEFORE *** getURI( obj ) function is called.
var runFirst = function runFirst() {
console.log( '2. Promise > runFirst() function called.' );
};

// We create a variable called getURI and assign it a function getURI( uri )
var getURI = function getURI( uri ) {
console.log('3. Promise > getURI( uri ) function called.');
// We then create a new Promise (Which is a wrapper..) to return.
return new Promise( function( resolve, reject ) {
// Our JSON request..
$.getJSON( uri, function( data ) {
// if data is not defined OR an empty string...
if (data =! true || data.length < 1) {
// Create a new error and...
var error = new Error();
// Inject an error status code of 204.
error.status = 204;
// Reject Promise with custom error.
reject( error );
} else {
// Continue...
resolve( data );
}
}).fail( reject );
// Invoke Promise Reject so we can handle the Ajax .fail() by status code.
}); // End promise.
};

// obj edit In Progress.
var processData = function processData( obj ) {
console.log( '3.2 Promise > processData( obj ) function called.' );
// Parse array of arrays if we have to. (For resultSet containing more than one record..)
$.each(obj, function( i, row ) {
// DO...
// Get current row.USER_ID from current row.
console.log('3.2.1 Get: row.USER_ID = '+ row.USER_ID);
// AND OR..
// Set current row.USER_ID to something else..
row.USER_ID = 'something else..';
// AND OR..
// Push a new_element into current row..
row.new_element = 'something new!';
//THEN...
// Get updated row.USER_ID from current row.
console.log('3.2.2 Set: '+ row.USER_ID);
}); // End jQuery for each loop
// Return Original and/or Augmented fectched object.
return Promise.resolve(obj);
};

// obj Done editing. Now we render it. (Display the most up to date version of it.)
var renderData = function renderData( obj ) {
console.log( '3.3 Promise > renderData( obj ) function called.' );
//console.log( obj );
// Return fectched object after being proccessed by processData.
return Promise.resolve(obj);
};

// anything we would like to run *** AFTER *** our getURI( uri ) function is called.
var runLast = function runLast( obj ) {
console.log( '3.4 Promise > runLast() function called.' );
console.log( '3.5 Promise > Successful $.getJSON() response received.' );
// Return fectched object after being proccessed by renderData.
return Promise.resolve(obj);
};
// error handling for $.getJSON() and anything else.
var handleError = function handleError( error ) {
console.log( 'Error - Promise > handleError( error ) function called.' );
console.log( 'Error - We found an error while fetching and/or augmenting some data.' );
// Error if $.getJSON() is status: 204 No Content.
if (error.status == 204) {
console.error( '$.getJSON() .status: ' + error.status + ' - No Content.');
return;
}
// Error if $.getJSON() is status: 404 Not Found.
if (error.status == 404) {
console.error( '$.getJSON() .status: ' + error.status + ' - Not Found.');
return;
}
// Error unknown...
console.log(error);
};

// We create a variable called runApplication and assign it a function runApplication()
var runApplication = function runApplication() {
console.log( '1.1 runApplication() function called.' );
// Similar to Ajax beforeSend()..
runFirst();
// getURI request execution order...
getURI( 'resultset.json' ) // entering Promise...
.then( processData )      // process the data...
.then( renderData )       // render the processed data...
.then( runLast )          // finalize...
.catch( handleError );    // catch our Ajax and Custom errors.)
};

  • 답변 # 1

    아약스 오류를 잡으려면 .fail 메소드를 추가하십시오.  후. 의사가 말했듯이, $.getJSON  자동 오류가 있습니다 ..

    $(document).ready(function() {
    console.log('1. Document is ready.');
    });
    // We create a variable called getURI and assign it a function getURI( uri )
    var getURI = function getURI( uri ) {
        // We then create a new Promise (Which is wrapper..) to return.
        return new Promise( function( resolve, reject ) {
            // Asynch request for JSON data... (Because that's what we are getting from the server.)
            // ajax commented due to snippet
            $.getJSON( uri, function( data ) {
                // if we got something, resolve promise
                if ( data ) resolve( data );
                // else reject promise and throw an Error.
                else reject( new Error( 'We could not load the URI: ' + uri ) );
            }).fail(reject)
            // End get.
        }); // End promise.
    };
    // anything we would like to run *** BEFORE *** getURI( obj ) function is called.
    var runFirst = function runFirst() {
        console.log( '3.1 Promise > runFirst() function called.' );
    };
    // obj being edited. Status in progress.
    var processData = function processData( obj ) {
        console.log( '3.2 Promise > processData( obj ) function called.' );
            // Parse array of arrays if we have to. (For resultSet containing more than one record..)
            $.each(obj, function( row_idx, row ) {
                // DO...
                // Get current row.USER_ID from current row.
                console.log('3.2.1 Get: '+ row.USER_ID);
                // AND OR..
                // Set current row.USER_ID to something else..
                row.USER_ID = 'something else..';
                // AND OR..
                // Push new row.new_element to something new!
                row.new_element = 'something new!';
                //THEN..
                // Get updated row.USER_ID from current row.
                console.log('3.2.2 Set: '+ row.USER_ID);
            }); // END jQuery for each loop
            // Return Formated Object.
            return Promise.resolve(obj);
    };
    // obj Done editing. Now we render it. (Display the most up to date version of it.)
    var renderData = function renderData( obj ) {
        console.log( '3.3 Promise > renderData( obj ) function called.' );
        //console.log( obj );
        return Promise.resolve(obj);
    };
    // anything we would like to run *** AFTER *** our getURI( uri ) function is called.
    var runLast = function runLast(obj) {
        console.log( '3.4 Promise > runLast() function called.' );
        return Promise.resolve(obj);
    };
    // finally handleError( error ); how we handle our catch function.
    var handleError = function handleError( error ) {
        console.log( '3.x Promise > handleError( error ) function called.' );
        console.log( '3.x We found an error while fetching and augmenting some data.' );
        console.error( error );
    };
    // We create a variable called runApplication and assign it a function runApplication()
    var runApplication = function runApplication() {
        // Similar to Ajax beforeSend()..
        runFirst();
        // getURI request execution order...
        getURI( 'resultset.json' )
            .then( processData )
            .then( renderData )
            .then( runLast )
            .catch( handleError );
    };
    // I think you can guess what this does.
    runApplication();
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    

관련 자료

  • 이전 javascript - jQueryvalidate ()의 요소에 이미 "활성"클래스가 있는지 확인하십시오
  • 다음 python - 요청 및 팬더를 사용하여 원격 Excel 파일의 헤더 가져 오기