gpt4 book ai didi

javascript - 从 JavaScript 中的异步函数返回值的最佳方法

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

我正在使用具有异步调用的nodejs的twit库,并且我制作了如下函数:

function getUserFromSearch(phrase) {
T.get('search/tweets', { q: phrase+' lang:pt', count: 1 }, function(err, data, response) {
data['statuses'].forEach(function(element) {
var result = "maybe";
say('getting user profile from search for '+phrase, result);
console.log(element);
return element['user']['screen_name'];
}, this);
})
}

因为 T.get() 是异步执行的,所以每当我执行时

var username = getUserFromSearch('banana');

我得到username=undefined,因为返回东西需要时间。显而易见的解决方案是实现这样的回调:

function getUserFromSearch(phrase, callback) {
T.get('search/tweets', { q: phrase+' lang:pt', count: 1 }, function(err, data, response) {
data['statuses'].forEach(function(element) {
var result = "maybe";
say('getting user profile from search for '+phrase, result);
console.log(element);
callback(element['user']['screen_name']);
}, this);
})
}

但我认为这不是最好的解决方案,因为我需要为此创建一个回调函数。是否有一种方法可以像这样传递用户名“指针”:getUserFromSearch('banana', username);,以便函数改变用户名的值?还有更好的方法吗?

最佳答案

Isn't there a way to pass the username 'pointer'

不,没有。 JavaScript 没有对变量的引用。

您可以传入一个带有用户名属性的对象并让它设置该属性,但这会将getUserFromSearch与特定对象紧密耦合并且不可组合。

Promise 是处理这种情况的好方法。它们是可组合的,并提供有关成功和失败的清晰语义:

function getUserFromSearch(phrase) {
return new Promise(function(resolve, reject) {
T.get('search/tweets', { q: phrase + ' lang:pt', count: 1 }, function(err, data, response) {
if (err) {
reject(err);
} else {
data['statuses'].forEach(function(element) {
var result = "maybe";
say('getting user profile from search for ' + phrase, result);
resolve(element['user']['screen_name']);
}, this);
}
})
});
}

用法:

getUserFromSearch(phrase).then(function(result) {
username = result;
});

是的,仍然有一个回调,但它是一个很容易与其他回调组合的回调。

<小时/>

使用 ES2015 语法:

function getUserFromSearch(phrase) {
return new Promise((resolve, reject) => {
T.get('search/tweets', { q: phrase + ' lang:pt', count: 1 }, function(err, data, response) {
if (err) {
reject(err);
} else {
data['statuses'].forEach(element => {
const result = "maybe";
say('getting user profile from search for ' + phrase, result);
resolve(element['user']['screen_name']);
});
}
})
});
}

用法:

getUserFromSearch(phrase).then(result => {
username = result;
});

关于javascript - 从 JavaScript 中的异步函数返回值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521333/

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