gpt4 book ai didi

javascript - 如何在我自己的函数中使用yield?

转载 作者:行者123 更新时间:2023-12-02 14:55:34 26 4
gpt4 key购买 nike

我对生成器概念很陌生。我的理解是,如果一个函数返回一个 Promise,那么它可以与yield 一起使用。所以我有一个非常小的node.js 脚本,如下所示:

Q.fcall(function*(){
var url = "mongodb://" + config.host + ":" + config.port + "/" + config.db;
var db = yield MongoClient.connect( url );
var data = yield makeRequest();
console.log( data );
db.close();
});


function makeRequest(){
var deferred = Q.defer();
request({
"method" : "GET",
"url" : "....",
"headers" : {
"Accept" : "application/json",
"user_key" : "...."
}
},function(err,data){
if( err ){
deferred.reject( err );
}else{
deferred.resolve( data );
}
});
return deferred.promise;
}

我知道这是有效的,因为我正在将它从回调 hell 风格移植到生成器风格。但是,我在 console.log 中看不到数据。

我需要更改什么才能使其正常工作?

最佳答案

Q.fcall 不适合使用生成器函数。您需要使用 dedicated generator methods为此,在您的情况下Q.spawn:

Q.spawn(function*() {
var url = "mongodb://" + config.host + ":" + config.port + "/" + config.db;
var db = yield MongoClient.connect( url );
try {
var data = yield makeRequest();
console.log( data );
} finally {
db.close();
}
});

如果没有运行器,生成器将不会自动异步前进。

关于javascript - 如何在我自己的函数中使用yield?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35838236/

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