我在新的JavaScript,下面是我的代碼(非特定的)來解釋我的問題任何辦法避免的JavaScript。那麼()方法
cornerstone.loadImage(imageIdpro).then(function(image) {//doSomething}
我已經知道了。那麼(函數())是異步功能,我的問題是,有沒有什麼辦法可以修改此代碼,以避免使用.then()
,並將其更改爲同步?任何幫助讚賞。
我之所以不想用。那麼()是因爲我想滑動改變一些值,以保持當我拖動滑塊
$("#upperBound").slider({
range: "max",
min: minPixelValue,
max: maxPixelValue,
slide: function(event, ui) {
$("#rangeUpper").html(ui.value);
currentUpperBound = ui.value;//currentUpperBound is current slide value
console.log("1");
loadAndViewImagethresholding(imageId);
console.log("4");
},
});
和loadAndViewImagethresholding
功能更新的結果是類似的東西:
function loadAndViewImagethresholding(imageId) {
var imageIdpro = "wadouri:" + "http://localhost:8888/dicomread/temp/" + loadfileName;
cornerstone.loadImage(imageIdpro).then(function(image) {
console.log("2");
upper = currentUpperBound;//upperBound slide current value
lower = currentLowerBound;//there is another lowerBound slide current value
for (var i = 0; i < image.getPixelData().length; i++) {
if (image.getPixelData()[i] < lower || image.getPixelData()[i] > upper) {
image.getPixelData()[i] = image.minPixelValue;
} else {
image.getPixelData()[i] = image.maxPixelValue;//Here is the problem!!image.getPixelData()[i] is a image pixel value at [i], every time when slide current value (upper or lower value)changes, this image.getPixelData()[i] has already changed
}
}
//after that for loop, image.getPixelData(which is a data array) has already changed (after each time slide value update)
cornerstone.displayImage(elementthresh, image);//but this function seems has been skipped
console.log("3");
});
}
因爲。那麼()是異步函數,這個代碼將執行類似(在控制檯號):1-4-2-3而非1-2-3-4如我所料,這似乎跳過displayImage();
(更新結果) 這就是我在考慮如果我可以將這個異步函數更改爲同步,它將以「正確」順序執行,並且在拖動滑動條時它將保持更新。
什麼是問題使用'.then()'? – guest271314
'cornerstone.loadImage(imageIdpro)'返回一個Promise ... ergo,它是異步的......沒有什麼可以將一個異步函數變成一個同步函數 - 而不是從異步代碼中逃跑,你應該,如果你想使用JavaScript,擁抱異步代碼和所有它必須提供 –
從今天起還不是正式的。今年可能會標準化['await'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)([ES 2017](https:/ /github.com/tc39/proposals/blob/master/finished-proposals.md))。這將允許應用程序異步運行,但代碼中的外觀類似於同步。 –