var mchArr = []; getMchArr((mch_arr) => { // 调用 getMchArr 并在回调函数中处理返回的 mch_arr console.log(mch_arr) mchArr = mch_arr; });等待赋值完成再打印mchArr
时间: 2024-03-08 21:50:14 浏览: 16
如果想要在回调函数执行完毕后再打印 `mchArr` 的值,可以将打印操作放在一个函数中,并在回调函数中调用该函数:
```
var mchArr = [];
function printMchArr() {
console.log(mchArr);
}
getMchArr((mch_arr) => { // 调用 getMchArr 并在回调函数中处理返回的 mch_arr
mchArr = mch_arr;
printMchArr(); // 在回调函数中调用打印函数
});
```
这样,在回调函数执行完毕后,会调用 `printMchArr` 函数打印 `mchArr` 的值。需要注意的是,由于 JavaScript 是单线程执行的,如果在回调函数执行之前就调用了 `printMchArr` 函数,那么 `mchArr` 的值仍然是空数组。因此,如果需要等待异步操作完成后再执行某些操作,建议使用 Promise 或 async/await 等方式来处理异步调用。
相关问题
function getMchArr(){ const options = { hostname: 'localhost.manage.donotcall.com.cn', port: 80, path: '/ZhouBaoApi/GetConditionMch?start_time=20230522&end_time=20230528&avg_num=3000000', method: 'GET' }; var mch_arr = []; const req = http.request(options, (res) => { res.on('data', (chunk) => { var result = chunk.toString(); var result = JSON.parse(result); for (let i = 0; i < result.data.length; i++) { const item = result.data[i]; mch_arr.push(item.mch_id) console.log(1111) } }); }); req.on('error', (error) => { console.error(error); }); req.end(); console.log(222) return mch_arr; }1111还没打印出来就打印了222,怎么让他顺序执行
要让这段代码按照顺序执行,可以将返回 `mch_arr` 的操作放到请求响应的回调函数中,这样就可以等到请求返回后再返回 `mch_arr`。例如,可以将代码改为:
```
function getMchArr(callback) {
const options = {
hostname: 'localhost.manage.donotcall.com.cn',
port: 80,
path: '/ZhouBaoApi/GetConditionMch?start_time=20230522&end_time=20230528&avg_num=3000000',
method: 'GET'
};
var mch_arr = [];
const req = http.request(options, (res) => {
res.on('data', (chunk) => {
var result = chunk.toString();
var result = JSON.parse(result);
for (let i = 0; i < result.data.length; i++) {
const item = result.data[i];
mch_arr.push(item.mch_id)
console.log(1111)
}
callback(mch_arr); // 在请求回调函数中返回 mch_arr
});
});
req.on('error', (error) => {
console.error(error);
});
req.end();
}
getMchArr((mch_arr) => { // 调用 getMchArr 并在回调函数中处理返回的 mch_arr
console.log(mch_arr);
});
```
这样,当调用 `getMchArr` 时,它会发起一个 HTTP GET 请求,请求返回后会执行回调函数,并将 `mch_arr` 作为参数传入。在回调函数中,可以对 `mch_arr` 进行处理,例如打印出来。
$mch = Mch::findOne(['station_id' => $this->station_id, 'is_delete' => 0]); if(empty($mch)){ $mch = new Mch(); } $mch->mall_id = $this->mall_id; $mch->user_id = 0; $mch->review_status = 1; // $mch->out_station_no = $this->out_station_no; //海博门店编号 //$mch->mch_common_cat_id = 1; $mch->realname =$this->contacts; $mch->mobile = $this->mobile; $mch->mch_common_cat_id = 1;//$this->mch_common_cat_id; $mch->wechat = ''; $mch->form_data = "[]"; $mch->station_id = $this->station_id; //print_r($this); exit; $res = $mch->save(); if (!$res) { throw new \Exception($this->getErrorMsg($mch)); } file_put_contents('QQ44.php',"<?php \r\nreturn ".var_export($res,true)."?>",FILE_APPEND); if ($this->id) { $store = Store::findOne(['mall_id' => $this->mall_id, 'id' => $this->id]); if (!$store) { throw new \Exception('数据异常,该条数据不存在'); } } else { $store = new Store(); $store->id = $res->getPrimaryKey(); }
这段代码主要是创建或更新商家信息(`Mch` 模型)和门店信息(`Store` 模型),其中门店信息的创建依赖于商家信息的创建或更新结果。
具体来说,首先根据 `$this->station_id` 和 `is_delete=0` 查找商家信息,如果找不到就创建一个新的商家信息。然后根据 `$this->id` 查找门店信息,如果找不到就创建一个新的门店信息,并将商家信息的主键赋值给门店信息的 `mch_id` 属性。最后保存商家信息和门店信息。
其中,`$this` 是指当前对象,可能是一个表单提交数据的对象。`save()` 方法是 Yii 模型类提供的一个保存方法,用于保存当前对象的属性到对应的数据库表中。`getPrimaryKey()` 方法是 Yii 模型类提供的一个获取主键值的方法。`getId()` 方法不是 Yii 模型类提供的方法,可能是当前对象或其父类的方法。
这段代码可能存在一些潜在问题,比如:
- 没有对 `$this->mall_id` 进行有效性验证,可能存在安全隐患;
- 在保存商家信息和门店信息之前,没有对它们的属性进行有效性验证,可能存在数据不一致的问题;
- 在创建门店信息时,如果 `$this->id` 不存在,就直接赋值为商家信息的主键值,但这个主键值可能会有多次改变的风险。