gpt4 book ai didi

javascript - 如何在nodejs中编写阻塞函数

转载 作者:行者123 更新时间:2023-11-30 13:11:15 25 4
gpt4 key购买 nike

嗨,我正在尝试缩短我的网址

function shorutrl(link)
{
var linkpost = JSON.stringify({longUrl:link});.

var optionslink = {
host: "www.googleapis.com",
port: 443,
method: 'POST',
path: "/urlshortener/v1/url",
headers: {
'Content-Type' : 'application/json'
}
};

optionslink.headers['Content-Length']=linkpost.length;
var linkreq = https.request(optionsimg, function(res) {
res.on('data', function (d) {
linkdata+=d;
});
res.on('end', function (x) {
try { return JSON.parse(linkdata).id; } catch(e){ return link; }
});
}).on('error', function (e) {
//console.log(e.message);
});
linkreq.write(optionslink);
linkreq.end();
}

function nonworking_givelink()
{
return shorutrl(txtlinks[Math.floor(Math.random() * txtlinks.length)]);
}

function working_givelink()
{
return txtlinks[Math.floor(Math.random() * txtlinks.length)];
}

nonworking_givelink 返回未定义的 working_givelink 正常返回链接

我是否应该编写一个新函数并将参数传递给它并生成新链接并将参数传递给另一个函数没有更简单的方法吗?

最佳答案

你不应该在 node.js 中编写阻塞代码,它违背了系统的设计。

您需要传递一个回调函数,该函数将在您的 .on('end', ...) block 中使用新 URL 调用。

或者,将其包装到一个新对象中,该对象本身会发出事件,例如:

var https = require('https');
var events = require('events');

function GoogleShortener() {
events.EventEmitter.call(this);
};

GoogleShortener.super_ = events.EventEmitter;
GoogleShortener.prototype = Object.create(events.EventEmitter.prototype, {
constructor: {
value: GoogleShortener,
enumerable: false
}
});

GoogleShortener.prototype.shorten = function(link) {

var self = this;
var data = JSON.stringify({longUrl: link});

var options = {
hostname: 'www.googleapis.com',
port: 443,
path: '/urlshortener/v1/url',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
};

var resp = '';

var req = https.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function(d) {
resp += d;
}).on('end', function() {
try {
var id = JSON.parse(resp).id;
self.emit('success', id);
} catch (e) {
self.emit('error', e);
}
});
}).on('error', function(e) {
self.emit('error', e);
});

req.write(data);
req.end();

return self;
};

exports.shorten = function(link) {
return new GoogleShortener().shorten(link);
};

用法:

var g = require('gshort');
g.shorten('http://www.google.com/').on('success', function(link) {
console.log(link)
});

关于javascript - 如何在nodejs中编写阻塞函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13804026/

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