Javascript回应承诺
我可能有点小麻烦。 这是一个返回承诺的函数Javascript回应承诺,javascript,reactjs,Javascript,Reactjs,我可能有点小麻烦。 这是一个返回承诺的函数 export default ()=>{ const socket = io(config.crypt_compare_api_url); let subscription = config.subscription; socket.emit('SubAdd', { subs: subscription }); return new Promise(resolve => { socket.o
export default ()=>{
const socket = io(config.crypt_compare_api_url);
let subscription = config.subscription;
socket.emit('SubAdd', { subs: subscription });
return new Promise(resolve => {
socket.on("m",resolve);
});
}
在这里我用它。它作为get_crypto导入
get_crypto().then((parsedData)=>{
let el=this.state.currencies.find(element=> element.name===parsedData.name);
if(el)
{
el.price=parsedData.price;
}
else this.state.currencies.push(parsedData);
this.setState( {
currencies: this.state.currencies
});
});
**“then”函数必须在套接字收到消息后重复执行。但它只工作一次,***您无法回忆然后多次回调。您应该使用observable或仅调用“m”事件的回调:
export const getCrypto=(cb)=>{
const socket=io(config.crypt\u compare\u api\u url);
让subscription=config.subscription;
emit('SubAdd',{subs:subscription});
插座上的(“m”,cb);
}
从'get crypto.js'导入{getCrypto};
getCrypto(解析数据=>{
console.log(parsedData);
//对已解析的数据执行某些操作
})
您无法调用然后多次回调。您应该使用observable或仅调用“m”事件的回调:
export const getCrypto=(cb)=>{
const socket=io(config.crypt\u compare\u api\u url);
让subscription=config.subscription;
emit('SubAdd',{subs:subscription});
插座上的(“m”,cb);
}
从'get crypto.js'导入{getCrypto};
getCrypto(解析数据=>{
console.log(parsedData);
//对已解析的数据执行某些操作
})
您必须再次调用get\u crypto()
以获得新承诺,因此您可以执行以下操作:
const datahandler = function(parsedData){
let el=this.state.currencies.find(element=> element.name===parsedData.name);
if(el)
{
el.price=parsedData.price;
}
else this.state.currencies.push(parsedData);
this.setState( {
currencies: this.state.currencies
});
}
const loop = function(){
get_crypto().then(datahandler).then(loop);
}
loop();
您必须再次调用
get\u crypto()
以获得新承诺,因此您可以执行以下操作:
const datahandler = function(parsedData){
let el=this.state.currencies.find(element=> element.name===parsedData.name);
if(el)
{
el.price=parsedData.price;
}
else this.state.currencies.push(parsedData);
this.setState( {
currencies: this.state.currencies
});
}
const loop = function(){
get_crypto().then(datahandler).then(loop);
}
loop();
你能举个例子吗?或者我可以给你一个例子。我做了这个get_crypto((parsedData)=>{let el=this.state.currences.find(element=>element.name===parsedData.name);if(el){el.price=parsedData.price;}else this.state.currences.push(parsedData);this.setState({currences:this.state.currences});});但我认为这不是最好的实践为什么不应该是最好的实践呢?你能举一些例子吗?或者我可以给你一些样本我做了这个得到加密((parsedData)=>{let el=this.state.currences.find(element=>element.name==parsedData.name);if(el){el.price=parsedData.price;}else this.state.currences.push(parsedData);this.setState({currences:this.state.currences};});但我认为这不是最佳实践为什么不应该是最佳实践?使用承诺不适合您的用例。承诺只解析和评估一次值。您需要一个类似可观察的模式。您能告诉我们从哪里获取加密()吗正在调用。我假设这是一个基于问号的react项目。请提供您的代码以便我们提供帮助。使用承诺不适合您的用例。承诺只解析和评估一次值。您需要一个类似可观察的模式。您能告诉我们从何处获取加密()吗正在调用。我假设这是一个基于问号的react项目。请提供您的代码,以便我们能够提供帮助