gpt4 book ai didi

node.js - 用下划线 map 做一些异步的事情

转载 作者:搜寻专家 更新时间:2023-11-01 00:40:02 26 4
gpt4 key购买 nike

function addSomething(data) {
var defer = q.defer();
data = _.map(data, function(item) {
item['something'] = callSomethingAsync();
return item;
});
return defer.promise;
}

我该如何处理这个问题。我发现的唯一方法是使用 Async.js。但也许使用 $q 有更好的方法?

编辑:

function getScopes(item) {
var defer = q.defer();
var query = "SELECT somevalue FROM Something WHERE ID = '" + item.id + "'";
mysql.query(query, function(err, data) {
if (err) {
defer.reject(err);
} else {
item[newkey] = data
defer.resolve(item);
}
});
defer.resolve(data)
return defer.promise;
}

//add necessary scopes to the audit
function addScopes(data) {
var promises = _.map(data, function(item) {
return getScopes(item);
});
return Promise.all(promises);
}

如何防止在 getScopes 函数中使用延迟?

编辑 2:

var query = "SELECT * FROM tiscope";
Q.nfcall(mysql.query, query).then(function(data) {
console.log(data);
});

没有任何返回。

下面是我使用 mysql 的方式:

var sql = require('mysql');

var connection = sql.createConnection({
host : 'xxx',
user : 'xxx',
password : 'xxx',
database : 'xxx'
});

connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
} else {
console.log('mysql connection established');
}
});

module.exports = connection;

也许有错误。

最佳答案

许多 promise 库都提供了 map 函数。似乎Q没有。无论使用 all 函数还是可以用 vanilla promises(和 Q)完成同样的事情。

要事第一。避免 defer。它使代码更难推理和维护。需要延迟的情况很少见。其余时间,普通的 promise 构造函数/辅助函数会工作得更好。

普通 promise 示例

function addSomething() {
var promises = _.map(data, function(item) {
return callSomethingAsync(item);
});
return Promise.all(promises);
}

Q Promises 示例

function addSomething() {
var promises = _.map(data, function(item) {
return callSomethingAsync(item);
});
return $q.all(promises);
}

大概 callSomethingAsync 返回一个 promise 。如果不使用 promise 构造函数模式:

function toPromise(asyncFn, args) {
return new Promise(function (resolve, reject) {
function callback(err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
}
asyncFn(callback, args);
});
}

function addSomething() {
var promises = _.map(data, function(item) {
return toPromise(callSomethingAsync, item);
});
return Promise.all(promises);
}

关于node.js - 用下划线 map 做一些异步的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054450/

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