fetch(
"https://rqyhfmwv4b.execute-api.us-east-1.amazonaws.com/production/join-meeting",
requestOptions
).then((response) => response.json())
.then(async (data) => {
// You need responses from server-side Chime API. See below for details.
const meetingResponse =
data.result
.meetingResponsee; /* The response from the CreateMeeting API action */
const attendeeResponse =
data.result
.attendeeResponsee; /* The response from the CreateAttendee or BatchCreateAttendee API action */
const configuration = new MeetingSessionConfiguration(
meetingResponse,
attendeeResponse
);
// In the usage examples below, you will use this meetingSession object.
const meetingSession = new DefaultMeetingSession(
configuration,
logger,
deviceController
);
const meetingReadinessChecker = new DefaultMeetingReadinessChecker(
logger,
meetingSession
);
// testing
if (pauseReadinessTest) {
setPauseReadinessTest(false);
return;
}
if (testParam == "All" && disableStartRedinessTest !== true) {
await audioTest(deviceController);
setMeetingTestProgress(15);
await micTest(meetingSession, meetingReadinessChecker, CheckAudioInputFeedback);
setMeetingTestProgress(25);
await videoTest(meetingSession, meetingReadinessChecker, CheckVideoInputFeedback);
await cameraTest(meetingSession, meetingReadinessChecker, CheckCameraResolutionFeedback);
setMeetingTestProgress(50);
await networkTest(meetingReadinessChecker, CheckNetworkTCPConnectivityFeedback, CheckNetworkUDPConnectivityFeedback);
setMeetingTestProgress(75);
await streamTest(meetingSession, meetingReadinessChecker, CheckAudioConnectivityFeedback, CheckVideoConnectivityFeedback);
setMeetingTestProgress(85);
await screenShareTest(meetingSession, meetingReadinessChecker, CheckContentShareConnectivityFeedback);
setMeetingTestProgress(100);
setRefreshIconClass(" ");
SetDisableStartRedinessTest(false);
setIsResult("result");
}
我有這段代碼,如果用戶想要退出測驗,我想取消掛起的等待函式呼叫。但問題是,每當變數的值被更新時,它都不會反映在導致主要問題的塊內。
uj5u.com熱心網友回復:
據我所知,promise 概念主要是一種語法糖。現實世界中會發生什么 - 您在函式呼叫 (A) 中傳遞一個回呼函式 (B),并且在某個時刻函式 A 將呼叫函式 B。如果您在撰寫函式 A 時沒有考慮到取消概念,則有沒有辦法取消通話。更容易使用其他方法(全域變數、額外傳遞的物件引數等)來設定標志“不運行”并在函式 B 中檢查它。
uj5u.com熱心網友回復:
你可以這樣做:
const promises = [{
functionCall: () => audioTest(deviceController),
progress: 15,
}, {
functionCall: await micTest(meetingSession, meetingReadinessChecker, CheckAudioInputFeedback),
progress: 25,
}, // ...etc.
];
while (testParam == "All" && disableStartRedinessTest !== true && promises.length) {
const { functionCall, progress } = promises.unshift();
await functionCall.call(this);
setMeetingTestProgress(progress);
}
雖然如果你正在考慮取消操作,我會使用 RxJS 而不是 vanilla Promise。
uj5u.com熱心網友回復:
如果您在回呼函式中有待處理的承諾,您可以使用 Promise.prototype.cancel() 方法取消它。例如:
var promise = new Promise(function(resolve, reject) {
// do something
if (/* some condition */) {
resolve(); // or reject(), depending on your needs
} else {
promise.cancel(); // this will cancel the pending promise and prevent it from being resolved or rejected
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/486582.html
標籤:javascript 反应 异步 异步等待 承诺
