小编bli*_*its的帖子

如何正确并行化2个函数并捕获错误?

我正在练习golang,我不知道如何捕捉错误.

我期待的是:

  1. FetchTickerData 运行
  2. 它同时调用2个不同的函数:fetchPriceTicketfetchWhatToMine
  3. 如果其中一个函数返回错误,则FetchTickerData返回该错误
  4. 如果一切正常,它会从两个来源处理数据并将其返回

我无法弄清楚如何捕捉错误.我写了这段代码,但我不认为这是正确的解决方案,它不起作用.有什么更好的方法呢?

package main

import "net/http"
import (
    "github.com/tidwall/gjson"
    "time"
    "io/ioutil"
    "fmt"
)

var client = &http.Client{Timeout: 10 * time.Second}

type Ticker struct {
}

func FetchTickerData() (error, *gjson.Result, *gjson.Result) {
    whatToMine := make(chan *gjson.Result)
    currency := make(chan *gjson.Result)
    err := make(chan error)
    counter := 0 // This variable indicates if both data was fetched

    go func() {
        innerError, json := fetchWhatToMine()

        fmt.Print(innerError)
        if innerError != nil {
            err …
Run Code Online (Sandbox Code Playgroud)

go

8
推荐指数
2
解决办法
351
查看次数

如何使用 Electron 运行和打包外部可执行文件?

例如,我有一个编译后的二进制文件cudaDeviceQuery,它以 JSON 形式返回设备列表。这是一段代码:

export default function cudaDeviceQuery(): Promise<CollectorResponse> {
  const throwError = () => {
    throw new Error("Unfortunately your platform isn't yet unsupported");
  };

  const file = __DARWIN__
    ? path.join(__dirname, 'darwin', 'cudaDeviceQuery')
    : __WIN32__
      ? path.join(__dirname, 'win', 'cudaDeviceQuery.exe')
      : throwError();

  const descriptor = spawn(file);

  return new Promise((resolve, reject) => {
    let outerData = '';
    descriptor.stdout.on('data', data => {
      outerData += data;
    });

    descriptor.on('close', () => {
      try {
        resolve(JSON.parse(outerData));
      } catch (e) {
        reject(e);
      }
    });
  });
} …
Run Code Online (Sandbox Code Playgroud)

node.js electron electron-builder electron-packager

5
推荐指数
1
解决办法
3789
查看次数