Для людей, которые используют AngularJS , может справиться с этой ситуацией, используя Promises
.
Здесь it говорит,
Обещания могут использоваться для отключения асинхронных функций и позволяют объединять несколько функций вместе.
blockquote>Вы можете найти приятное объяснение здесь .
Пример, найденный в docs , упомянутом ниже.
promiseB = promiseA.then( function onSuccess(result) { return result + 1; } ,function onError(err) { //Handle error } ); // promiseB will be resolved immediately after promiseA is resolved // and its value will be the result of promiseA incremented by 1.
Angular2 and Later
In
Angular2
, посмотрите на следующий пример, но его рекомендовал использоватьObservables
сAngular2
.search(term: string) { return this.http .get(`https://api.spotify.com/v1/search?q=${term}&type=artist`) .map((response) => response.json()) .toPromise();
}
Вы можете использовать это таким образом,
search() { this.searchService.search(this.searchField.value) .then((result) => { this.result = result.artists.items; }) .catch((error) => console.error(error)); }
См. здесь оригинал . Но TypScript не поддерживает native es6 Promises , если вы хотите его использовать, для этого вам может понадобиться плагин.
Кроме того, здесь представлены обещания spec определите здесь.
Я столкнулся с той же проблемой. WinForms ReportViewer уже осведомлен о DPI и сделает свое собственное масштабирование. Вам просто нужно сообщить системе, что ваше приложение DPI известно, чтобы система не пыталась масштабировать его после.
Добавьте манифест в ваше приложение, если вы еще этого не сделали, а затем внутри тега , добавьте следующее:
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
Вы также можете использовать функцию API SetProcessDPIAware, но рекомендуется использовать ее: http://msdn.microsoft.com/en-us/library/ms633543 .aspx
В качестве бесплатного ответа на вопрос о том, что @JoMan сказал (поскольку я не могу комментировать его сообщение), имейте в виду, что вы можете вручную масштабировать элементы пользовательского интерфейса в своем приложении относительно просто. Поэтому оставьте свое приложение DPI осведомленным (чтобы ваша система не искажала напечатанные результаты), как предложил JOMan. Вы можете использовать что-то вроде этого ...
Using g As System.Drawing.Graphics = WindowsForm.CreateGraphics
Dim sngScaleFactor As Single = 1
Dim sngFontFactor As Single = 1
If (graphics.Dpix >= 96) Then
sngScaleFactor = (graphics.Dpix / 96) - 0.25
sngFontFactor = (graphics.Dpix / 96) - 0.25
End If
If WindowsForm.AutoScaleDimensions = WindowsForm.CurrentAutoScaleDimensions Then
WindowsForm.Scale(sngScaleFactor)
For Each child As Control In WindowsForm.Controls
ScaleFontRecursively(child, sngFontFactor)
Next
End If
End Using
Я уверен, что многие люди будут спорить (правильно!), Что вы вообще не хотите обнаруживать DPI и вручную масштабируете себя, но ошибка с автозагрузка на дюйм, запечатанная печатными отчетами microsoft, по-прежнему остается неизменной по состоянию на 2018 год, поэтому это обеспечивает легкую работу.