Вопросы по тегу: asynchronous

(29)

В чем разница между .Wait() и .GetAwaiter().GetResult()?

Мой метод возвращает Задание. Я хочу подождать, пока он не закончится. Что я должен использовать .Wait() или .GetAwaiter().GetResult()? В чем между ними разница?
u

user6011767

6 лет назад

Ответов: 1

Как вернуть значения из асинхронных функций, используя асинхронное ожидание из функции?

Как вернуть значение из асинхронной функции? Я пытался поставить лайкconst axios = require('axios'); async function getData() { const data = await axios.get('https://jsonplaceholder.typicode.com/posts'); return data; } console.log(getData()); мне возвращается этоPromise { }
K

King Rayhan

4 года назад

Ответов: 3

How do I access store state in React Redux?

I am just making a simple app to learn async with redux. I have gotten everything working, now I just want to display the actual state onto the web-page. Now, how do I actually access the store's state in the render method? Here is my code (everything is in one page because I'm just learning): const initialState = { fetching: false, fetched: false, items: [], error: null } const reducer = (state=initialState, action) => { switch (action.type) { case "REQUEST_PENDING": { return {...state, fetching: true}; } case "REQUEST_FULFILLED": { return { ...state, fetching: false, fetched: true, items: action.payload } } case "REQUEST_REJECTED": { return {...state, fetching: false, error: action.payload} } default: return state; } }; const middleware = applyMiddleware(promise(), thunk, logger()); const store = createStore(reducer, middleware); store.dispatch({ type: "REQUEST", payload: fetch('http://localhost:8000/list').then((res)=>res.json()) }); store.dispatch({ type: "REQUEST", payload: fetch('http://localhost:8000/list').then((res)=>res.json()) }); render( { this.props.items.map((item) => {item.title} )} , document.getElementById('app') ); So, in the render method of the state I want to list out all the item.title from the store. Thanks
P

Parkicism

6 лет назад

Ответов: 6

What could this be about? [TsLint Error: "Promises must be handled appropriately"]

I'm doing some basic asynchronous operations using async/await in TypeScript but TSLint is throwing mysterious error messages for these two functions below. Has anyone encountered these errors before? On the error output the governing rule is not mentioned, so I don't understand what's causing these. Any ideas would be greatly appreciated. The main request: import * as rp from 'request-promise' export function getRequest(address: rp.Options): rp.RequestPromise { return rp(address) } Exported async function: export async function getStatus(message: Message) { try { const res = await getRequest(address) if (res.ready) { message.reply('...') } else { message.reply('...') } } catch (err) { message.reply(err) } } This gets: Promises must be handled appropriatelyand await of non-Promise for line #3. The simple function that uses this export is: client.on('message', message => { if (message.content === 'green') { getStatus(message) } }) This also gets Promises must be handled appropriately. Additional information: Even though the error message doesn't mention it, this seems to be the governing rule for Promises must be handled appropriately: https://palantir.github.io/tslint/rules/no-floating-promises/ And this Issue mentions await of non-Promise: https://github.com/palantir/tslint/issues/2661
c

cinnaroll45

5 лет назад

Ответов: 6

How do yield and await implement flow of control in .NET?

As I understand the yield keyword, if used from inside an iterator block, it returns flow of control to the calling code, and when the iterator is called again, it picks up where it left off. Also, await not only waits for the callee, but it returns control to the caller, only to pick up where it left off when the caller awaits the method. In other words-- there is no thread, and the "concurrency" of async and await is an illusion caused by clever flow of control, the details of which are concealed by the syntax. Now, I'm a former assembly programmer and I'm very familiar with instruction pointers, stacks, etc. and I get how normal flows of control (subroutine, recursion, loops, branches) work. But these new constructs-- I don't get them. When an await is reached, how does the runtime know what piece of code should execute next? How does it know when it can resume where it left off, and how does it remember where? What happens to the current call stack, does it get saved somehow? What if the calling method makes other method calls before it awaits-- why doesn't the stack get overwritten? And how on earth would the runtime work its way through all this in the case of an exception and a stack unwind? When yield is reached, how does the runtime keep track of the point where things should be picked up? How is iterator state preserved?
J

John Wu

5 лет назад

Ответов: 5

How to read file with async/await properly?

I cannot figure out how async/await works. I slightly understand it but I can't make it work.function loadMonoCounter() { fs.readFileSync("monolitic.txt", "binary", async function(err, data) { return await new Buffer( data); }); } module.exports.read = function() { console.log(loadMonoCounter()); }; I know, I could use readFileSync, but if I do, I know I'll never understand async/await and I'll just bury the issue.Goal: Call loadMonoCounter() and return the content of a file.That file is incremented every time incrementMonoCounter() is called (every page load). The file contains the dump of a buffer in binary and is stored on a SSD.No matter what I do, I get an error or undefined in the console.
J

Jeremy Dicaire

4 года назад

Ответов: 12

Как мне ожидать одновременного выполнения нескольких обещаний без «быстрого сбоя»?

Я использую async/await для параллельного запуска нескольких вызовов api:async function foo(arr) { const results = await Promise.all(arr.map(v => { return doAsyncThing(v) })) return results } Я знаю, что, в отличие от циклов, Promise.all выполняется параллельно (то есть часть ожидания результатов выполняется параллельно) .Но Я также знаю, что: Promise.all отклоняется, если один из элементов отклоняется и Promise.all терпит неудачу быстро: если у вас есть четыре обещания, которые разрешаются после тайм-аут, и один сразу отклоняет, тогда Promise.all отклоняет немедленно. Когда я это читал, если я Promise.all с 5 обещаниями, а первое завершившееся возвращает reject (), тогда остальные 4 эффективно отменяются, а их обещанный resolve () значения потеряны.А есть третий способ? Где выполнение фактически параллельно, но единичный сбой не испортит всю связку?
B

Brandon

5 лет назад

Ответов: 2

Канал async не найден

Я пытаюсь создать простой блог с Angular 2 и Firebase, и у меня возникают проблемы с использованием async pipe в компоненте. Я получаю ошибку в консоли. zone.js: 344 Отклонение необработанного обещания: Ошибки синтаксического анализа шаблона: Канал async не может быть найден (" [ОШИБКА ->] {{(blog.user | async) ?. first_name}} "): BlogComponent@6: 3; Зона:; Задача: Promise.then; Значение: Ошибка: Ошибки синтаксического анализа шаблона: (…) Ошибка: Ошибки синтаксического анализа шаблона: Канал async не может быть найден (" blog.component.tsимпорт {Component, Input} из "@ angular / core"; @Компонент({ селектор: 'блог-компонент', templateUrl: './blog.component.html', styleUrls: ['./blog.component.css'], }) export class BlogComponent { @Input () блог; } blog.component.html {{blog.title}} {{(blog.user | async) ?. first_name}} app.component.tsимпорт {Component} из '@ angular / core'; импортировать {BlogService} из "./services/services.module"; @Компонент({ селектор: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { конструктор (частный blogService: BlogService) {} article = this.blogService.getAllArticles (); } app.component.html blog.service.tsимпорт {Injectable} из "@ angular / core"; импортировать {AngularFire} из "angularfire2"; import {Observable} из "rxjs"; import "rxjs / add / operator / map"; @Injectable () export class BlogService { конструктор (частный af: AngularFire) {} getAllArticles (): Observable { return this.af.database.list ('статьи', { запрос: { orderByKey: правда, limitToLast: 10 } }). map ((статьи) => { return article.map ((article) => { article.user = this.af.database.object (`/ users / $ {article.user_id}`); возврат статьи; }); }); } } Проблема возникает только тогда, когда я пытаюсь использовать async в файле blog.component.html. Это сработает, если я попытаюсь напечатать имя пользователя в файле app.component.html. Должен ли я вводить AsyncPipe в blog.module.ts? Как я могу заставить асинхронный режим работать в blog.component.ts?
B

Balaji

5 лет назад

Ответов: 12

Является ли использование async / await внутри конструктора new Promise () анти-шаблоном?

Я использую функцию async.eachLimit для управления максимальным количеством операций за раз.const { eachLimit } = require("async"); function myFunction() { return new Promise(async (resolve, reject) => { eachLimit((await getAsyncArray), 500, (item, callback) => { // do other things that use native promises. }, (error) => { if (error) return reject(error); // resolve here passing the next value. }); }); } Как видите, я не могу объявить функцию myFunction как асинхронную, потому что у меня нет доступа к значению во втором обратном вызове функции eachLimit.
u

user5487299

5 лет назад

Ответов: 4

Is using async componentDidMount() good?

Is using componentDidMount() as an async function good practice in React Native or should I avoid it? I need to get some info from AsyncStorage when the component mounts, but the only way I know to make that possible is to make the componentDidMount() function async. async componentDidMount() { let auth = await this.getAuth(); if (auth) this.checkAuth(auth); } Is there any problem with that and are there any other solutions to this problem?
M

Mirakurun

4 года назад

Ответов: 8

Подождите, пока завершится выполнение цикла swift for с асинхронными сетевыми запросами.

Я хотел бы, чтобы цикл for in отправлял кучу сетевых запросов в firebase, а затем передавал данные новому контроллеру представления после завершения выполнения метода. Вот мой код:var datesArray = [String: AnyObject]() for key in locationsArray { let ref = Firebase(url: "http://myfirebase.com/" + "\(key.0)") ref.observeSingleEventOfType(.Value, withBlock: { snapshot in datesArray["\(key.0)"] = snapshot.value }) } // Segue to new view controller here and pass datesArray once it is complete У меня есть пара проблем. Во-первых, как мне дождаться завершения цикла for и выполнения всех сетевых запросов? Я не могу изменить функцию ObservationSingleEventOfType, она является частью Firebase SDK. Кроме того, могу ли я создать какое-то состояние гонки, пытаясь получить доступ к dateArray из разных итераций цикла for (надеюсь, что это имеет смысл)? Я читал о GCD и NSOperation, но немного растерялся, так как это первое приложение, которое я создал.Примечание. Массив местоположений - это массив, содержащий ключи, к которым мне нужно получить доступ в firebase. Также важно, чтобы сетевые запросы запускались асинхронно. Я просто хочу дождаться завершения ВСЕХ асинхронных запросов, прежде чем передать dateArray следующему контроллеру представления.
J

Josh

6 лет назад

Ответов: 9

Почему setState в Reactjs Async вместо Sync?

Я только что обнаружил, что в response this.setState () функция в любом компоненте является асинхронной или вызывается после завершения функции, в которой она была вызвана.Теперь я поискал и нашел этот блог (операция мутации состояния setState () может быть синхронной в ReactJS)Здесь он обнаружил, что setState является асинхронным (вызывается, когда стек пуст) или синхронизируется (вызывается сразу после вызова), в зависимости от того, как было инициировано изменение состояния.Эти две вещи сложно переварить В блоге функция setState вызывается внутри функции updateState, но то, что вызвало функцию updateState, не является тем, о чем может знать вызываемая функция . Зачем им делать setState async, поскольку JS - это однопоточный язык, а этот setState не является WebAPI или серверным вызовом, поэтому должен выполняться только в потоке JS. Делают ли они это для того, чтобы повторный рендеринг не останавливал всех прослушивателей событий и прочее, или возникла какая-то другая проблема с дизайном.
A

Anup

6 лет назад

Ответов: 8

React - Display loading screen while DOM is rendering?

Это пример со страницы приложения Google AdSense. Экран загрузки, отображаемый до главной страницы, отображается после.• 100001Обновлено:Я сделал пример своего подхода, поместив загрузчик экрана в index.html и удалив его в React componentDidMount () метод жизненного цикла.Пример и экран загрузки-реакции.
T

Thanh Nguyen

5 лет назад

Ответов: 23

Зачем использовать Task<T> вместо ValueTask<T> в C #?

Начиная с C # 7.0 асинхронные методы могут возвращать ValueTask . В объяснении говорится, что его следует использовать, когда у нас есть кешированный результат или симуляция асинхронности через синхронный код. Однако я до сих пор не понимаю, в чем проблема с использованием ValueTask всегда или почему async / await изначально не строился с типом значения. Когда ValueTask не сможет выполнить задание?
S

Stilgar

5 лет назад

Ответов: 4

Asyncio.gather против asyncio.wait

asyncio.gather и asyncio.wait, похоже, имеют схожее использование: у меня есть куча асинхронных вещей, которые я хочу для выполнения / ожидания (не обязательно дожидаться завершения одного до начала следующего). Они используют другой синтаксис и отличаются в некоторых деталях, но мне кажется очень непитоничным наличие двух функций, которые имеют такое огромное перекрытие по функциональности. Что мне не хватает?
C

Claude

5 лет назад

Ответов: 5

В чем разница между запуском / присоединением и async / await в сопрограммах Kotlin

В библиотеке kotlinx.coroutines вы можете запустить новую сопрограмму, используя launch (с join) или async (с ждать). В чем разница между ними?
R

Roman Elizarov

4 года назад

Ответов: 8

Если async-await не создает дополнительных потоков, то как он заставляет приложения реагировать?

Снова и снова я вижу, что он говорит, что использование async-await не создает дополнительных потоков. Это не имеет смысла, потому что единственные способы, с помощью которых компьютер может выполнять более одной задачи за раз, - это. На самом деле одновременное выполнение более одной задачи (параллельное выполнение, использование нескольких процессоров) Моделирование его путем планирования задач и переключения между ними (немного A, немного B, немного A и т. Д.) Итак, если async-await не выполняет ни одно из этих действий, то как это может сделать приложение отзывчивым? Если существует только 1 поток, то вызов любого метода означает ожидание завершения метода, прежде чем делать что-либо еще, а методы внутри этого метода должны дождаться результата, прежде чем продолжить, и так далее.
M

Ms. Corlib

6 лет назад

Ответов: 11

Node.js: почему вы должны возвращать результат обратного вызова во время обработки ошибок?

Новичок в Node.js здесь. Я изучаю Node.js с помощью руководств по адресу NodeSchool.io, а в одном руководстве, где мы узнали о модулях, нам потребовалось написать что-то вроде этого кода:// Some code... function filteredLs(dir, ext, callback) { fs.readdir(dir, function(err, files) { if (err) return callback(err); // return statement necessary here... callback(null, withExtension(files, ext)); // ...but not here }) } module.exports = filteredLs; У меня вопрос в том, почему в подобных примерах необходимо включать оператор return при обработке ошибки, но можно опустить, если он равен нулю? Я не понимаю, какое использование возвращаемое значение функции могло иметь readdir в любом случае, поскольку это происходит после того, как она завершает свою работу. Почему это имеет значение?
J

James Ko

6 лет назад

Ответов: 2

What is the difference between asynchronous programming and multithreading?

I thought that they were basically the same thing — writing programs that split tasks between processors (on machines that have 2+ processors). Then I'm reading this, which says: Async methods are intended to be non-blocking operations. An await expression in an async method doesn’t block the current thread while the awaited task is running. Instead, the expression signs up the rest of the method as a continuation and returns control to the caller of the async method. The async and await keywords don't cause additional threads to be created. Async methods don't require multithreading because an async method doesn't run on its own thread. The method runs on the current synchronization context and uses time on the thread only when the method is active. You can use Task.Run to move CPU-bound work to a background thread, but a background thread doesn't help with a process that's just waiting for results to become available. and I'm wondering whether someone can translate that to English for me. It seems to draw a distinction between asyncronicity (is that a word?) and threading and imply that you can have a program that has asynchronous tasks but no multithreading. Now I understand the idea of asynchronous tasks such as the example on pg. 467 of Jon Skeet's C# In Depth, Third Edition async void DisplayWebsiteLength ( object sender, EventArgs e ) { label.Text = "Fetching ..."; using ( HttpClient client = new HttpClient() ) { Task task = client.GetStringAsync("http://csharpindepth.com"); string text = await task; label.Text = text.Length.ToString(); } } The async keyword means "This function, whenever it is called, will not be called in a context in which its completion is required for everything after its call to be called." In other words, writing it in the middle of some task int x = 5; DisplayWebsiteLength(); double y = Math.Pow((double)x,2000.0); , since DisplayWebsiteLength() has nothing to do with x or y, will cause DisplayWebsiteLength() to be executed "in the background", like processor 1 | processor 2 ------------------------------------------------------------------- int x = 5; | DisplayWebsiteLength() double y = Math.Pow((double)x,2000.0); | Obviously that's a stupid example, but am I correct or am I totally confused or what? (Also, I'm confused about why sender and e aren't ever used in the body of the above function.)
u

user5648283

6 лет назад

Ответов: 2

Asynchronously running a ruby script from ruby

Based on an external redis queue, I want a Sinatra application to run a script like this: ruby fetch_vin.rb vin_number_123 This will fire up watir-webdriver and report to the queue appropriately. When the script is finished, everything but the Sinatra app should close. It seems however that Thread, as well as exec and spawn are all blocking when ran from inside ruby. How do I fire & forget?
d

dsp_099

6 лет назад

Ответов: 1

Программа подключается к серверу на локальном хосте, но не работает через локальную сеть или Интернет.

Я сделал суперпростую игру на простом C #, используя Windows Forms, чтобы немного узнать о том, как заставить программы «разговаривать» через Интернет. Сервер и клиент находятся в одной и той же программе, и пользователь просто выбирает, какой из них он является, нажав кнопку.В настоящее время он работает так, как я хочу, пока сервер и клиент работают на одном ПК с использованием IP 127.0.0.1 для подключения. Если я пытаюсь использовать внутренний или внешний ip (порт открыт), он больше не работает (срабатывает «Before Accept», а «Before Receive» - нет).Я получил базу для моего кода от Дэррила Браатена, который ответил на чей-то вопрос: создать клиент асинхронного сокета C # в многопоточной средеAsyncServer.csusing System; using System.Collections.Generic; using System.Data; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; using System.Diagnostics; namespace blockbattle { public class AsyncServer { private const int port = 11000; public int clientID = -1; public string serverPos = ""; public string clientPos = ""; public string newBullets = ""; public bool bulletsSent = false; public string receivedBullets = ""; public void StartServer() { Thread thread = new Thread(Run) { IsBackground = true }; thread.Start(); } private void Run() { Debug.WriteLine("Running"); TcpListener tcpListener = new TcpListener(IPAddress.Loopback, port); tcpListener.Start(); while (true) { Debug.WriteLine("Before Accept"); ServerState state = new ServerState { WorkSocket = tcpListener.AcceptSocket() }; Debug.WriteLine("Before Receive"); Receive(state); } } private void Receive(ServerState state) { state.WorkSocket.BeginReceive(state.Buffer, 0, ServerState.BufferSize, 0, ReceiveCallBack, state); } private void ReceiveCallBack(IAsyncResult ar) { ServerState state = (ServerState)ar.AsyncState; try { int byteReceived = state.WorkSocket.EndReceive(ar); if (byteReceived > 0) { string receivedString = Encoding.UTF8.GetString(state.Buffer, 0, byteReceived); string[] receivedData = receivedString.Split('+'); clientID = int.Parse(receivedData[0]); clientPos = receivedData[1]; if (receivedData[2].Length > 0) receivedBullets = receivedData[2]; byte[] bytesToSend = Encoding.UTF8.GetBytes(string.Format("{0}+{1}", serverPos, newBullets)); if (newBullets.Length > 0) { newBullets = ""; bulletsSent = true; } Array.Copy(bytesToSend, state.Buffer, bytesToSend.Length); state.WorkSocket.Send(state.Buffer, 0, bytesToSend.Length, SocketFlags.None); Array.Clear(state.Buffer, 0, state.Buffer.Length); Receive(state); } } catch (Exception e) { Debug.Print(e.ToString()); } } private class ServerState { public const int BufferSize = 1024; public readonly byte[] Buffer = new byte[BufferSize]; public Socket WorkSocket = null; } } } AsyncClient.csusing System; using System.Collections.Generic; using System.Data; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; using System.Diagnostics; namespace blockbattle { public partial class AsyncClient { private const int port = 11000; private readonly int _clientId; private readonly Random _random; public string clientPos = ""; public string serverPos = ""; public string newBullets = ""; public bool bulletsSent = false; public string receivedBullets = ""; public string lastBullet = ""; public AsyncClient(int clientId) { _clientId = clientId; _random = new Random(clientId); } public void StartClient(IPAddress serverIP) { try { Socket workSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ClientState state = new ClientState { WorkSocket = workSocket }; workSocket.BeginConnect(new IPEndPoint(serverIP, port), ConnectCallBack, state); } catch (Exception ex) { Debug.Print(ex.Message); } } private void ConnectCallBack(IAsyncResult ar) { ClientState state = (ClientState)ar.AsyncState; state.WorkSocket.EndConnect(ar); Send(state); } private void Receive(ClientState clientState) { clientState.WorkSocket.BeginReceive(clientState.Buffer, 0, ClientState.BufferSize, 0, ReceiveCallBack, clientState); } private void ReceiveCallBack(IAsyncResult ar) { ClientState state = (ClientState)ar.AsyncState; Socket client = state.WorkSocket; int byteReceived = client.EndReceive(ar); if (byteReceived > 0) { string receivedString = Encoding.UTF8.GetString(state.Buffer, 0, byteReceived); string[] receivedData = receivedString.Split('+'); serverPos = receivedData[0]; if (receivedData[1].Length > 0) receivedBullets = receivedData[1]; Array.Clear(state.Buffer, 0, state.Buffer.Length); Thread.Sleep(33); Send(state); } } private void Send(ClientState clientState) { byte[] buffer = Encoding.UTF8.GetBytes(string.Format("{0}+{1}+{2}", _clientId, clientPos, newBullets)); if (newBullets.Length > 0) { newBullets = ""; bulletsSent = true; } try { clientState.WorkSocket.BeginSend(buffer, 0, buffer.Length, 0, BeginSendCallBack, clientState); } catch (Exception ex) { Debug.Print(ex.Message); } } private void BeginSendCallBack(IAsyncResult ar) { ClientState state = (ClientState)ar.AsyncState; int byteSent = state.WorkSocket.EndSend(ar); Receive(state); } } public class ClientState { // Client socket. public Socket WorkSocket = null; // Size of receive buffer. public const int BufferSize = 1024; // Receive buffer. public byte[] Buffer = new byte[BufferSize]; public int Count = 0; } }
K

Kossuranta

6 лет назад

Ответов: 1

Вызов функций async / await параллельно

Насколько я понимаю, в ES7 / ES2016 размещение нескольких awaitв коде будет работать аналогично цепочке .then () с обещаниями, что означает, что они выполнят одно после другого, а не параллельно. Так, например, у нас есть такой код:await someCall(); await anotherCall(); Правильно ли я понимаю, что anotherCall () будет вызываться только после завершения someCall ()? Каков самый элегантный способ их параллельного вызова?Я хочу использовать его в Node, может, есть решение с асинхронной библиотекой?РЕДАКТИРОВАТЬ: я не удовлетворен решением, представленным в этом вопросе: Замедление из-за непараллельного ожидания обещаний в асинхронных генераторах, потому что оно использует генераторы, и я спрашиваю о более общем вариант использования.
V

Victor Marchuk

6 лет назад

Ответов: 12

Python Tornado I / O Loop current () vs instance () метод

Я просматривал документы о торнадо.При чтении на IOLoop есть содержание, в котором говорится, как показано ниже. Обычно вы должны использовать IOLoop.current по умолчанию, когда создание асинхронного объекта и использование IOLoop.instance, когда вы означает связываться с основным потоком из другого. Имеет смысл использовать метод instance () для связи по многопоточности с использованием одного глобального IOLoop instance.Но что здесь асинхронный объект и почему я должен использовать current () в случае асинхронного объекта?
S

SangminKim

6 лет назад

Ответов: 1

Зачем нам нужно промежуточное ПО для асинхронного потока в Redux?

Согласно документации, «Без промежуточного программного обеспечения хранилище Redux поддерживает только синхронный поток данных». Я не понимаю, почему это так. Почему компонент контейнера не может вызвать асинхронный API, а затем отправить действия?Например, представьте себе простой пользовательский интерфейс: поле и кнопку. Когда пользователь нажимает кнопку, поле заполняется данными с удаленного сервера.import * as React from 'react'; import * as Redux from 'redux'; import { Provider, connect } from 'react-redux'; const ActionTypes = { STARTED_UPDATING: 'STARTED_UPDATING', UPDATED: 'UPDATED' }; class AsyncApi { static getFieldValue() { const promise = new Promise((resolve) => { setTimeout(() => { resolve(Math.floor(Math.random() * 100)); }, 1000); }); return promise; } } class App extends React.Component { render() { return ( Fetch {this.props.isWaiting && Waiting...} ); } } App.propTypes = { dispatch: React.PropTypes.func, field: React.PropTypes.any, isWaiting: React.PropTypes.bool }; const reducer = (state = { field: 'No data', isWaiting: false }, action) => { switch (action.type) { case ActionTypes.STARTED_UPDATING: return { ...state, isWaiting: true }; case ActionTypes.UPDATED: return { ...state, isWaiting: false, field: action.payload }; default: return state; } }; const store = Redux.createStore(reducer); const ConnectedApp = connect( (state) => { return { ...state }; }, (dispatch) => { return { update: () => { dispatch({ type: ActionTypes.STARTED_UPDATING }); AsyncApi.getFieldValue() .then(result => dispatch({ type: ActionTypes.UPDATED, payload: result })); } }; })(App); export default class extends React.Component { render() { return ; } } Когда экспортированный компонент визуализируется, я могу щелкнуть кнопку, и входные данные будут правильно обновлены.Обратите внимание на функцию update в вызове connect. Он отправляет действие, которое сообщает приложению, что оно обновляется, а затем выполняет асинхронный вызов. После завершения вызова предоставленное значение отправляется как полезная нагрузка другого действия.Что плохого в таком подходе? Зачем мне использовать Redux Thunk или Redux Promise, как предлагает документация?РЕДАКТИРОВАТЬ: Я поискал в репозитории Redux подсказки и обнаружил, что в прошлом от Action Creators требовалось быть чистыми функциями. Например, здесь пользователь пытается лучше объяснить поток асинхронных данных: Сам по себе создатель действия по-прежнему является чистой функцией, но функция преобразователя, которую он возвращает, не обязательна, и она может выполнять наши асинхронные вызовы Создатели действий больше не обязаны быть чистыми. Итак, промежуточное программное обеспечение thunk / prom определенно требовалось в прошлом, но похоже, что это уже не так?
s

sbichenko

6 лет назад

Ответов: 11

Как отказаться в синтаксисе async/await?

Как я могу отклонить обещание, возвращаемое функцией async/await? например, изначально:foo(id: string): Promise { return new Promise((resolve, reject) => { someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400)) }); } Перевести в async/await:async foo(id: string): Promise { try{ await someAsyncPromise(); return 200; } catch(error) { //здесь происходит, если someAsyncPromise() отклонен} return 400; //в результате будет получено разрешенное обещание. }); } Так как же мне правильно отказаться от этого обещания в данном случае?
P

Phoenix

5 лет назад

Ответов: 7

F# : Монадные операции без вычислительных выражений

Предоставляет ли F# какой-либо "стандартный" набор операторов для работы с монадическими (в частности Async) операциями вне вычислительных выражений? Я обнаружил, что мой код в конечном итоге засорен множеством локальных определений операторов, таких как:let (>>=) a b = async.Bind (a, b) С учетом того, насколько хорош набор операторов для составления чистых функций - , |> и >> и т.д. - я чувствую, что, должно быть, я что-то упускаю.Предвосхищая возможные комментарии - вычислительные выражения хороши для некоторых вещей, но для конвейеризации серии асинхронных операций:async { let! a' = a let! b' = b a' return! c b' } Не так приятно, как:a >>= b >>= c
g

geoff_h

6 лет назад

Ответов: 1

Разница между CompletableFuture, Future и Observable в RxJava

Я хотел бы узнать разницу между. CompletableFuture, Future и Observable RxJava.Как я знаю, все они являются асинхронными, но Future.get() блокирует поток CompletableFuture предоставляет методы обратного вызоваRxJava Observable --- аналогично CompletableFuture с другими преимуществами (не уверен) Например: если клиенту нужно сделать несколько вызовов сервиса, и когда мы используем Futures (Java) Future.get() будет выполняться последовательно... хотелось бы узнать, как это лучше сделать в RxJava..А в документации http://reactivex.io/intro.html говорится Использовать Futures для оптимального составления условных потоков асинхронного выполнения сложно (или невозможно, поскольку задержки каждого запроса меняются во время выполнения). Это, конечно, можно сделать, но это быстро становится сложным (и, следовательно, чревато ошибками) или преждевременно блокируется на Future.get(), что устраняет преимущество асинхронного выполнения..Очень интересно узнать, как RxJava решает эту проблему. Мне было трудно понять это из документации.
s

shiv455

6 лет назад

Ответов: 5

async foreach и mongoose в nodejs

В mongoose я создаю отношения типа mongoose document, теперь я хочу получить массив объектовобъекты являются детьми объекта, который мы имеемнапример, в tweeter у одного пользователя есть столько твитов, и каждый твит имеет заголовок, содержание и автораи кто-то дает нам идентификатор пользователя, а мы даем ему массив заголовков и содержимого всех твитов пользователя[ {title: 'title01', content: 'aaaaaa'}, {title: 'title02', content: 'bbbbb'}, . . . ] Я стараюсь const username = req.params.username; User.find({ username: username }, (err, docs) => { if (err) return res.json({ err: true }); if (docs.length > 0) { let lives: Array = []; docs[0].lives.forEach((live, idx) => { Live.find({ _id: live }, (err, docs) => { lives.push(docs[0]); }); }); } else { return res.json({ err: true }); } }); Жизни имеют название контента и автора (в БД я назвал его пользователем) но из-за aSync я не могу получить жизни после forEach :)Обновлено:схема для прямого эфира:const schema = new mongoose.Schema({ title: { type: String, required: true, }, content: { type: String, required: true, }, user: { type: mongoose.Schema.Types.ObjectId, ref: "users", required: true, }, }); схема для пользователя:import { ArraySortOptions } from "joi"; import mongoose, { Model } from "mongoose"; interface IUser extends mongoose.Document { email: string; username: string; password: string; lives: Array; } const schema: mongoose.Schema = new mongoose.Schema({ username: { type: String, required: true, }, password: { type: String, required: true, }, email: { type: String, required: true, }, lives: [ { type: mongoose.Schema.Types.ObjectId, ref: "lives", }, ], }); const User: Model = mongoose.model("users", schema); export default User;
u

user11880398

год назад

Ответов: 2

Асинхронные вызовы в Springboot+Java

У меня есть сценарий, в котором я выполняю большое количество валидаций в последовательности, например...public class validationClass{ public validate(ValidationObject validationObj){ validation1(validationObj); validation2(validationObj); validation3(validationObj); validation4(validationObj); ... validationN(validationObj); return validationObj; } } validationObject передается в каждую валидацию, и все ошибки, если они присутствуют, будут вложены в него, и, наконец, объект будет возвращен обратно. В настоящее время это занимает гораздо больше времени, поскольку выполнение происходит последовательно.Можно ли выполнять проверки параллельно, объединять ответы в каждом потоке и отправлять обратно? Возможно ли достичь этого с помощью Completable Futures? Я не смог найти пример для этого. Пожалуйста, может кто-нибудь подсказать мне?
S

ShefZee

год назад

Ответов: 2

2022 WebDevInsider