gpt4 book ai didi

node.js - 处理异步调用的回调

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

所以。

我有一个关于处理对 Azure 数据库的 Windows Azure 移动服务异步调用的问题。

现在,我正在发布一个带有数组的对象,我又在 WAMS api 端点中循环该对象。

循环获取数组中的当前对象,并将其与唯一 ID 一起推送到数据库。这会返回最后插入的行的行 ID,在回调中我会获取该行并实例化另一个异步调用。
然后,我在这里插入最后插入的行 ID,以及数组当前循环中对象的一堆属性。

但是,这似乎表现得很奇怪,并且在我的第二个异步调用中的所有列中插入相同的信息。

for (var i = 0; i < object.array.length; i++) {

var mssql = request.service.mssql,
prop1 = object.array[i].prop1,
prop2 = object.array[i].prop2,
user = object.user.userid;

mssql.query("exec stored_procedure ?, ?", [user, prop1], {
success: function (res) {

var insertedid = res[0];

if (typeof insertedid === 'undefined') {
return;
} else {
insertedid = insertedid.ID;
}

mssql.query("exec stored_procedure_2 ?, ?", [insertedid, prop2], {

//success

});

}
});
}

我可能做了一些完全错误的事情,因为我不太喜欢我所制作的东西,但考虑到我对 Node.js 的熟悉程度,就是这样。

最佳答案

这是使用 async.js 的可能实现。如果您有两个以上的属性,则需要动态生成“insertPropX”函数,但这应该可以帮助您入门。

var mssql = request.service.mssql;
var user = object.user;

function insertProp1(obj, cb) {
mssql.query("exec stored_procedure ?, ?", [user.userid, obj.prop1], {
success: function (res) {
var inserted = res[0];
if (!inserted) {
return cb('prop1 not inserted for userid: ' + user.userid);
}
// pass the ID and the object to the next
// function in the "waterfall" chain
cb(null, inserted.ID, obj);
}
});
}

function insertProp2(id, obj, cb) {
mssql.query("exec stored_procedure_2 ?, ?", [id, obj.prop2], {
success: function (res) {
var inserted = res[0];
if (!inserted) {
return cb('prop2 not inserted for id: ' + id);
}
// since this is the last function in
// the "waterfall" chain, we don't need
// to pass anything along
cb(null);
}
});
}

// for each object in the array...
async.each(object.array, function iterator (obj, cb) {
// insert properties in order, passing the
// insertion ID as an argument
async.waterfall([
insertProp1.bind(null, obj),
insertProp2
], cb);
}, function allDone (err) {
if (err) {
console.log(err);
}
// all done
});

关于node.js - 处理异步调用的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493870/

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