Реагировать на интеграцию асинхронного внутреннего вызова - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть эта функция в бэкэнде моего приложения MERN (с M не для Mon go, но MySQL). Эта функция асинхронно выбирает все запасы в базе данных и возвращает их как обратный вызов.

getAllStocks: function(callback) {
    var context = dbContext.create();

    // First select the stock to get its price
    context.query(`SELECT  * from Stock`, function(err, result) {
        if (err) throw err;

        module.exports.stocks = callback(err, result);

    });

    return result;

}

Я попытался экспортировать обратный вызов в переменную в этой строке:

module.exports.stocks = callback(err, result);

И вызвать его в моем приложении React

import { stocks } from '../../Backend/StockFunctions';
import mysql from 'mysql';
import './App.css';

import React, { Component } from 'react'

export default class App extends Component {

constructor() {
  super();
  this.state = {
    stocks: []
  }
}

async componentDidMount() {
  console.log(stocks);
}

I Я пробовал это таким образом, и он печатает пустой массив.

Я также попытался изменить функцию на это:

getAllStocks: function(callback) {
    var context = dbContext.create();

    // First select the stock to get its price
    context.query(`SELECT  * from Stock`, function(err, result) {
        if (err) throw err;

        callback(result);

        // Make sure that the user has enough of the stock to sell it (amout <= total stock qty)

    });
}

и вызвать его так:

async componentDidMount() {
  getAllStocks(function(result) {
    return result;
  }) 
}

И затем возвращается ошибка:

error

Как мне это сделать?

...