gpt4 book ai didi

node.js - 纤维/ future 不能没有纤维

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:07 25 4
gpt4 key购买 nike

您好,我正在尝试使用光纤来等待请求,但它给出了错误

“错误:没有光纤就无法等待”

我应该做什么来处理这个问题。顺便说一下,我不使用meteor,只是纯粹的nodejs。

const Fiber = require('fibers')
const Future = require('fibers/future')
const request = require('request')
const v3_key = "*****";

// Application Declartion
function Movie() {
this.apiKey = v3_key;
}

/**
Now playing search on tmdb with
page
language
*/
Movie.now_playing = (page,language) =>{

let now_playing = new Future()

const options = {
method:"GET",
url:"https://api.themoviedb.org/3/movie/now_playing",
qs:{
page:page ? page : 1,
language:language ? language : "en-US",
apiKey:v3_key
},
body:'{}'
};

request(options,(error,response,body)=>{
if(error) now_playing.return(error);


now_playing.return(response);

});

console.log(now_playing);
return now_playing.wait();

};


module.exports = Movie

最佳答案

now_playing.wait() 调用需要在纤程的“上下文”中执行。它不能在顶级事件上下文中执行(例如,从 setTimeout 回调),也不能在默认初始上下文中执行。

获取 Fiber 上下文的最直接方法是创建一个新的 Fiber 并在其上调用 run() 。但是有很多环境可以为您创建 Fiber(例如,如果您习惯使用 Meteor,Meteor 可能会为您创建 Fiber)。

所以,问题不一定出在这段代码上。 Movie.now_playing 的调用者需要确保在 Fiber 上下文中调用该方法。如果您在其他地方有 Fiber,那么请确保在该上下文中调用它,而不是在顶级事件回调中调用(例如,不感知 Fiber 的 Node 模块可能会调用回调来响应操作系统事件 - 这不会是 Fiber 上下文。)如果您自己滚动所有内容,请确保您已经创建了第一个 Fiber 并运行它以进入允许“等待”的 Fiber 上下文。

使用 future 控制流:此外,您的 request 回调有点损坏,因为在“错误”情况下,两个“return”语句都会执行。一般来说,当对 future 调用“return”或“throw”时,您可能应该在该行前面添加 return 以使控制流语义与代码相匹配:

request(options,(error,response,body)=>{
if (error) return now_playing.return(error);
return now_playing.return(response);
});

关于node.js - 纤维/ future 不能没有纤维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45130561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com