Reactjs 如何将redux saga与异步回调函数一起使用

Reactjs 如何将redux saga与异步回调函数一起使用,reactjs,redux-saga,fingerprintjs2,Reactjs,Redux Saga,Fingerprintjs2,我想使用redux sagayield calleffect和async函数,该函数的结果是回调。(在这种情况下,但这是一般情况) 这是我想要使用的异步函数: new Fingerprint2().get(function(result, components) { console.log(result) // a hash, representing your device fingerprint console.log(components) // an array of FP compon

我想使用redux sagayield calleffect和async函数,该函数的结果是回调。(在这种情况下,但这是一般情况)

这是我想要使用的异步函数:

new Fingerprint2().get(function(result, components) {
console.log(result) // a hash, representing your device fingerprint
console.log(components) // an array of FP components
})
问题是我想通过saga执行这个函数,但它总是停留在yield调用上

我尝试了很多方法:

import Fingerprint2 from 'fingerprintjs2';

const func = new Fingerprint2().get;
const res = yield call(func);
也可以这样尝试:

import Fingerprint2 from 'fingerprintjs2';

const func = new Fingerprint2().get;
const a = yield call(func, (fingerprint, result) => ({
  fingerprint,
  result
}));
import Fingerprint2 from 'fingerprintjs2';

let res = yield call(new Fingerprint2().get(), (fingerprint, result) => ({
  fingerprint,
  result
}));
就像这样:

import Fingerprint2 from 'fingerprintjs2';

const func = new Fingerprint2().get;
const a = yield call(func, (fingerprint, result) => ({
  fingerprint,
  result
}));
import Fingerprint2 from 'fingerprintjs2';

let res = yield call(new Fingerprint2().get(), (fingerprint, result) => ({
  fingerprint,
  result
}));
有人知道实现我目标的想法或方法吗


谢谢

收益
可以接受承诺

const {result, components} = yield new Promise(resolve => {
  new Fingerprint2().get(function(result, components) {
    resolve({result, components})
  })
})

对于任何想要回答这个问题的人,有以下几种选择:

使用cps:

const { result, components } = yield cps(cb => new Fingerprint2().get((result, components) => cb(null, { result, components })))
承诺:

 function* rootSaga(){
// Wrapping you function into a promise
const promise = new Promise((resolve, reject) => {
  new Fingerprint2().get((result, components) => {
  resolve({ result, components })
})
})

 // Yield the promise And redux-saga will return the resolved value when the promise resolves
 const { result, components } = yield promise
// do some stuff about  result and components ...
}

信贷:redux saga github

谢谢,这是一项工作,但我有一个问题:有没有一种方法可以实现这一点,而不用承诺?我尝试使用cps,但它也是堆栈。